sql-server - SQL Server 和 REAL 数据类型的舍入问题

标签 sql-server rounding

在 SQL Server 2008 中舍入时,我看到一些奇怪的行为。给出以下代码:

DECLARE @Value REAL
SELECT @Value = .35
SELECT ROUND(@Value, 1)

我预计该值为 0.4,但它输出为 0.3。我必须假设这是因为存储的值实际上小于 0.35,类似于 0.34999999999999。是这样吗,还是我做错了什么?有没有办法确保其行为符合预期,至少从可见值来看?

最佳答案

当您使用 REAL 和 FLOAT(相同)等浮点值时,SQL Server ROUND() 函数遵循 IEEE 标准 754 并使用“向上舍入”算法。

但这对于不同的浮点值意味着不同的事情。一些“.5”值最终存储为“.49999999999”的近似值,其他值存储为“.500000001”等。它对实际存储的值进行四舍五入,而不是您开始时指定的值。

http://msdn.microsoft.com/en-us/library/ms187912.aspx

如果精确的十进制数学对您很重要,请使用 DECIMAL,而不是 FLOAT 或 REAL。

关于sql-server - SQL Server 和 REAL 数据类型的舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526386/

相关文章:

sql - 如果存在则删除触发器并创建

ios - Azure 移动服务自定义 API 多次调用 SQL SP

javascript - 如何避免或解决下取整函数和错误表示的整数?

c# - 为什么在 c# 中 2.135 总是四舍五入(使用 2 位小数)到 2.13

java - 我怎样才能正确舍入这个数字?

iOS 将 Double 值四舍五入到小数点后 2 位,并将小数点后第三位向上舍入

c# - 为存储过程调用实现线程池

sql-server - 更新sql server表中的Top 1记录

sql - 我可以在外键列中添加非原子值吗?

Java 舍入误差