Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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中的舍入和值比较问题_Sql_Sql Server 2008 - Fatal编程技术网

SQL Server中的舍入和值比较问题

SQL Server中的舍入和值比较问题,sql,sql-server-2008,Sql,Sql Server 2008,当我试图得到两个显然相等的数之间的差时,我得到的是一个不同于零的数 product_price min_product_price price_dif 40,609756097561 40,609756097561 -2,1316282072803E-14 我明白如果没有所有的疑问,这可能是一个很难回答的问题,但我会尽力解释 产品价格直接来自ERP数据库 最低产品价格通过 MIN(ItemSellingPrices.UnitPrice) as min_p

当我试图得到两个显然相等的数之间的差时,我得到的是一个不同于零的数

product_price       min_product_price   price_dif
40,609756097561     40,609756097561         -2,1316282072803E-14
我明白如果没有所有的疑问,这可能是一个很难回答的问题,但我会尽力解释

产品价格
直接来自ERP数据库

最低产品价格
通过

MIN(ItemSellingPrices.UnitPrice) as min_product_price
与GROUPBY子句一起使用。这不意味着数字是一样的吗


我没有处理此类问题的经验,如果这太基本,我深表歉意。

看起来像浮点问题

如果要在
float
real
列中存储货币值,请尝试使用
十进制
/
数字
数据类型


例如,要存储12个十进制值,可以使用
十进制(18,12)

在比较浮点数时,应始终使用delta或@w0lf等固定格式。你可以从Rudy Velthuis那里读到浮点运算,实际上我只是在用一个视图。那是一样的吗?当然。您需要更改视图中使用的表中的数据类型。无论在何处存储/表示货币金额,都应使用小数。如果无法修改表(例如,它们可能属于另一个应用程序),则可以在对其执行进一步操作之前,将这些值转换为十进制数据类型。我想会的。终于明白了。我将min_product_price设置为十进制(18,13),现在我得到了一个更清晰的结果(000000..)。有没有办法把它变成“0”?我不想为此打开一个新主题。我认为最好的方法是在客户端应用程序/报表中格式化结果,使用特殊的格式化技术(例如,C#的decimal.ToString()方法允许您自定义输出格式)。SQL中的另一种方法是将结果转换为十进制(18,0),但这显然会导致精度损失,从而导致错误。