SQL Server CEILING 100 = 101?

时间:2014-10-15 00:19:06

标签: sql sql-server tsql

我在SQL Server 2012中发现了一个非常奇怪的行为,100的CEILING给了我101,有时甚至100。

我需要得到一个考虑2位小数的数字的上限,这意味着将0.254转换为0.26

所以我试着跑

SELECT CEILING(field * 100.0) / 100.0 
FROM Table

这应该有效,至少对大多数数据都有效。

有关如何解决它的想法吗?

This is an example of the weird behavior

1 个答案:

答案 0 :(得分:1)

您在这里看到的是浮点错误。将数字存储在浮点列中时,它并不准确,因此数字1实际上可能是1.0000000000000000000000001。因此,将它乘以100会得到一个大于100的数字,因此CEILING将其舍入为101.

解决方案是首先对数字进行ROUND,这将消除浮点错误。注意我使用5作为小数位数,你需要决定你自己的精度值。

SELECT CEILING(ROUND(field,5)*100.0)/100.0 FROM Table