我在SQL Server 2012中发现了一个非常奇怪的行为,100的CEILING
给了我101,有时甚至100。
我需要得到一个考虑2位小数的数字的上限,这意味着将0.254转换为0.26
所以我试着跑
SELECT CEILING(field * 100.0) / 100.0
FROM Table
这应该有效,至少对大多数数据都有效。
有关如何解决它的想法吗?
答案 0 :(得分:1)
您在这里看到的是浮点错误。将数字存储在浮点列中时,它并不准确,因此数字1实际上可能是1.0000000000000000000000001。因此,将它乘以100会得到一个大于100的数字,因此CEILING
将其舍入为101.
解决方案是首先对数字进行ROUND,这将消除浮点错误。注意我使用5作为小数位数,你需要决定你自己的精度值。
SELECT CEILING(ROUND(field,5)*100.0)/100.0 FROM Table