【发布时间】:2015-10-16 21:08:36
【问题描述】:
我在 SQL Server 2008 中四舍五入时看到一些奇怪的行为。鉴于以下代码:
DECLARE @Value REAL
SELECT @Value = .35
SELECT ROUND(@Value, 1)
我希望该值为 0.4,但它输出 0.3。我必须假设这是因为存储的值实际上小于 0.35,类似于 0.34999999999999。是这种情况,还是我做错了什么?有没有办法确保其行为符合预期,至少从可见值来看?
【问题讨论】:
-
如果
@Value的类型是DECIMAL(10,2),你会得到什么?请记住,REAL是一种近似数据类型,这意味着它可能确实将 .35 存储为 .34999999999999 或类似的东西。 -
使用 DECIMAL(10,2) 可以得到预期的结果。不幸的是,我的数据库已经为此使用了 REAL。也许我需要考虑转换。
-
是的,我建议转换。
REAL和FLOAT不是您应该使用的数据类型,如果您期望逻辑(例如,比大多数科学教给您的更近似)四舍五入。
标签: sql-server rounding