SQL Server的CEILING函数将100取整后得到的结果是101?
- 论坛
- SQL Server的CEILING函数将100取整后得到的结果是101?
12 浏览
匿名的
0 Comments
你在这里看到的是浮点误差。当你将一个数字存储在浮点列中时,它并不是精确的,所以数字1实际上可能是1.0000000000000000000000001。所以将它乘以100会得到一个比100稍微大一点的数字,因此CEILING
将它四舍五入为101。
解决方法是首先对数字进行四舍五入,这将消除浮点误差。注意,我使用了5作为小数位数,你需要根据自己的精度需求来决定。
SELECT CEILING(ROUND(field,5)*100.0)/100.0 FROM Table
我应该在应用CEILING之前将其四舍五入到10位小数吗?这似乎是一个变通方法。我应该如何正确处理这个问题?
也许不需要10位小数,你的应用程序真正需要多少位小数?超过2位小数的情况很少见,但只有你了解你的问题领域。