【发布时间】:2021-05-10 09:59:08
【问题描述】:
因此,当我将小数点后的第一位数字设为 4 或 5 或 8 时,我会得到一个不正确的舍入值作为输出(如下面的“案例 1”所示)。但是当我在同一个地方使用其他数字(1,2,3,5,6,9,0)时,我得到了预期的结果(如下面的“案例 2”所示)。谁能解释为什么会这样?
--CASE 1
DECLARE @factor float = 0.425,
@amount money = 1
SELECT CONVERT(money, ROUND(@factor * @amount, 2))
--output is 0.42 (should be 0.43)
--CASE 2
SET @factor = 0.625
SELECT CONVERT(money, ROUND(@factor * @amount, 2))
--output is 0.63 (correct)
请注意,通过使用另一个变量来存储产品 - '@factor * @amount' 然后使用该变量来获取舍入值,可以解决此问题。但我只是好奇为什么我以前会看到这种差异。 提前致谢。
【问题讨论】:
-
第一个案例的输出是
0.42,而不是你说的0.425(检查,因为那会是一个更令人惊讶的结果) -
请尝试在 dbfiddle 之类的东西上重现您的问题,因为目前,似乎对我来说一切正常(也许你已经简化了问题,并在这样做的过程中消除了问题的原因?) db<>fiddle example
-
@Damien_The_Unbeliever- 抱歉,打错了。我已经编辑过了。谢谢
标签: sql sql-server rounding