有意思,Google了一下,看到一个Example,提供了一些思路。 可能不知道在什么地方做了DECLARE把你的公式计算结果定义为一个什么data format,比如decimal(3,1),类似下面的@value然后ROUND做出的判断就跟下面的example一样有点反常识。 DECLARE @value int SET @value = 16.999999 SELECT ROUND(@value, 1) -- 16 - No rounding with no digits right of the decimal point i.e. int
有意思,Google了一下,看到一个Example,提供了一些思路。 可能不知道在什么地方做了DECLARE把你的公式计算结果定义为一个什么data format,比如decimal(3,1),类似下面的@value然后ROUND做出的判断就跟下面的example一样有点反常识。 DECLARE @value int SET @value = 16.999999 SELECT ROUND(@value, 1) -- 16 - No rounding with no digits right of the decimal point i.e. int
是MS SQL Server。
Report bug 吧
select round(17.74543846, 2); 输出啥?
是cast一下吗?如果是的话,试了,没区别。
那我其他的计算不就给影响了。
如果是数字结果的话就可以round up。但是把公式放在round里面就出错。
还是你的数据出错了阿, round 这么多人用, 不可能出错的阿。
这就是 调试程序的步骤, round 没错, 就是你的输入错了呗。
你看我如果是select a*b,那结果就是1.745386。 我如果就在这个a*b外面套一个变成select round(a*b,2),结果就变1.74。script区别就是这么一点。有人遇到过这种情况吗?我隐隐觉得是sql 什么东西需要clear cache 还是啥的,但不确定。
这个让最后结果,n, 四舍五入到小数点两位,不影响中间结果
那我如果有另外一个计算的结果是17.742386,本来round down应该是17.74。结果这么一加再roundup,不就变成17.75了?
要不就是我没看懂你在说什么,要么就是你没看懂我在说什么。
上 screenshot.
问题是round不总是round down啊。
我之前说过如果round里面是数字不是公式的话,就会roundup出正确结果。
我现在担心的是sql 有时候出正确结果有时候出错误结果。希望找出可能的原因来避免错误结果的出现。
那肯定是不行啊。公司的政策还是要注意的。 总之区别就是在那个公式外面套了个round(n, 2)
当然不是让你把所有东西都 post 出来阿。
还是一个出float 17.745…..,另一个出17.74。
试了在这个subquery外面再套一个query再round,还是不行。我现在越来越觉得是server方面出了问题。需要dbcc清除一下cached execution plan。
Round(n,2)不就是round(n,2,0)吗?
那应该还是公式的问题。确定公式单独输出数值是对的吗?
这个例子里value 是整数,16。
只能把前面的值一个个打印岀来看。我也不清楚,大概要用中间变量?
或者一步一步重头来,每一步至少运行三遍,正确后再进行下一步。
Round(n,3) 结果是是什么?
with tmp as (select a*b as c from table)
select round(c, 2) as result from tmp