Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server上限为100=101?_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server上限为100=101?

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。因此,将其乘以

我在SQLServer2012中发现了一个非常奇怪的行为,100的
上限给了我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位以上的内容,但只有您知道您的问题域。