SQL Server上限为100=101?
我在SQLServer2012中发现了一个非常奇怪的行为,100的SQL Server上限为100=101?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQLServer2012中发现了一个非常奇怪的行为,100的上限给了我101,有时是100 我需要得到一个数字的上限,考虑到2个小数,这意味着将0.254转换为0.26 所以我试着跑 SELECT CEILING(field * 100.0) / 100.0 FROM Table 至少对于大多数数据来说,这应该是可行的 你知道怎么解决吗 您在这里看到的是浮点错误。当您在浮点列中存储一个数字时,它是不精确的,因此数字1实际上可能是1.0000000000000000001。因此,将其乘以
上限给了我101,有时是100
我需要得到一个数字的上限,考虑到2个小数,这意味着将0.254转换为0.26
所以我试着跑
SELECT CEILING(field * 100.0) / 100.0
FROM Table
至少对于大多数数据来说,这应该是可行的
你知道怎么解决吗
您在这里看到的是浮点错误。当您在浮点列中存储一个数字时,它是不精确的,因此数字1实际上可能是1.0000000000000000001。因此,将其乘以100会得到一个略大于100的数字,因此天花
将其四舍五入到101
解决方案是首先对数字进行四舍五入,这将消除浮点错误。请注意,我使用了5作为小数位数,您需要根据自己的精度值来决定
SELECT CEILING(ROUND(field,5)*100.0)/100.0 FROM Table
尝试使用而不是浮点mathROUND将不会返回上限或下限(我与floor有相同的问题)?在应用上限之前,我应该将其四舍五入到10位小数吗?这似乎是一个解决办法。我应该如何正确处理这个问题?也许不是10个,您的应用程序中真正需要多少个?很少需要小数点后2位以上的内容,但只有您知道您的问题域。