sql server中舍入函数的不同行为

时间:2016-10-12 14:29:45

标签: sql-server rounding

回合函数有两种行为:值cours等于“3.1235”,round(cours, 3) = 3.123。虽然,当我们用这个圆形公式round(3.1235, 3) = 3.1240中的值(3.1235)替换cours时。

2 个答案:

答案 0 :(得分:0)

您不应该将float数据类型用于特定的十进制值,因为它不是为此目的而设计的。需要查看更多代码才能更好地了解您尝试执行的操作,但如果需要最初是浮点数,那么您可以将@cours转换为十进制吗?

round(cast(@cours as decimal(5,4)), 3)

答案 1 :(得分:0)

你的FLOAT并不真正包含3.1235,这只是在网格中打印或显示的内容。 FLOAT内部为3.1234999999999999,显然向下舍入为3.123

文字3.1235成为一个具有足够精确度的NUMERIC,完全准确,因此可以按照预期的那样向上舍入到3.124

证明:

SELECT CAST('3.1235' as FLOAT),
       CAST( 3.1235  as FLOAT)
-- misleading output: both print 3.1235

SELECT CAST(CAST('3.1235' as FLOAT) as NUMERIC(24,23)),
       CAST(CAST( 3.1235  as FLOAT) as NUMERIC(24,23))
-- both print 3.12349999999999990000000

SELECT CAST('3.1235' as NUMERIC(24,23)),
       CAST( 3.1235  as NUMERIC(24,23))
-- both print 3.12350000000000000000000