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