SQL四舍五入问题

时间:2019-03-26 07:20:18

标签: sql sql-server

请考虑这些MONEY类型的值(样本值,并且这些值可以更改)

select 4796.529 + 1585.0414 + 350.9863 + 223.3549 + 127.6314+479.6529 + 158.5041

由于某种原因,我需要像这样将每个值四舍五入到小数位数

select round(4796.529,3)+ round(1585.0414,3)+ round(350.9863,3)+ round(223.3549,3)+ round(127.6314,3)+ round(479.6529,3)+ round(158.5041,3)

但是当我取总和时,它们显示出很小的变化。代码的第一行返回7721.7000。第二个是7721.6990。但是这种变化是不可接受的。解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

正如Whencesoever所说,您的问题是数学问题,而不是编程错误。

  • 12.5 + 11.6 = 24.1
  • ROUND(12.5)+ ROUND(11.6)= 25
  • ROUND(12.5 + 11.6)= 24

我会与企业讨论并弄清楚他们希望在何处应用四舍五入。

此外,请注意,MONEY是一种可怕的数据类型。如果可以,您可能要考虑切换到DECIMAL。参见Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server?

答案 1 :(得分:3)

在对数字求和之前四舍五入的结果与对数字求和后进行舍入的结果会有所不同。就那么简单。没有办法解决这个问题。