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),但这显然会导致精度损失,从而导致错误。