【发布时间】:2017-09-14 08:05:25
【问题描述】:
我在 SQL Server 2014 中遇到了舍入问题:当我将一个数字舍入到小数点后 2 位时,如果我之前转换为浮点数,则舍入的数字有时会有所不同。 例如,如果我执行:
select round(cast(3.945 as float),2)
select round(3.945,2)
我有:
3.94
3.950
但如果我执行:
select round(cast(3.935 as float),2)
select round(3.935,2)
我有:
3.94
3.940
似乎不正确,将 3.935 和 3.945 转换为浮动之前,我得到了相同的值。这是一个错误吗?
【问题讨论】:
-
正常浮点行为。如果需要精确值,请使用十进制数据类型。
-
Float是一个approximate data type,你不能保证它会产生正确的值,它总是会给你一个可能正确或不正确的近似值,如果你关心数据的准确性使用确切的数据类型,例如DECIMAL(18,2) -
仅供参考:除了
cast(3.945 as float),您还可以使用3.945E0或3945E-3/ 其变体作为另一种获得浮点文字的方式。这对您描述的行为没有影响;顺便说一句。
标签: sql sql-server casting rounding