SQL麻烦使用长浮点数,数学

时间:2012-09-27 15:52:10

标签: sql sql-server-2000

我的库存数据库中有2个值。一个是QtyOnHand(浮动),另一个是计算该项目的所有库存交易(想想SUM(TransQty),其中transQty也是浮点数)。问题是,随着时间的推移,由于未知原因,这些值中的某些值不同步。所以现在我正在努力清理它们。

基本上,我正在使用QtyOnHand(我们宣称这是准确的),并从中减去交易总额。然后对差异的交易进行更正。这很有效,直到我们得到具有大量“十进制尘埃”的数字。此外,即使在实际值更像0的情况下,浮动似乎也会显示0.0000000000000000237

以下是我无法纠正的一些数据。

Example Data

科学记谱法的项目给我带来了麻烦。即使显示项目PLXL-105-H的行显示-18,-18也不能准确显示,因为我的查询仅返回超出1%不匹配的值。我一直在完全使用TSQL,它是否有助于操纵C#程序的值?

所以,这是我的问题:我应该如何处理这些数字?我已经尝试将它们转换为DECIMAL(38,38),但这给了我算术溢出。我需要获得表示差异的准确值,然后使用该值来平衡问题。

1 个答案:

答案 0 :(得分:1)

你是如何进入的?

做类似的事情:

with to_update as (
     select itemNumber, QtyOnHand, TransBal
     from t
)
update tb_table
    set offset = TransBal - QtyOnHand
    from to_update
    where to_udpate.itemNumber = tb_table.itemNumber

应该这样做。

我听起来你正试图将数据从数据库中取出,操纵它,然后再将它放回去。如果你留在数据库中,你就不会有问题,因为这些值永远不会转换为字符串。

顺便说一句,对于十进制转换,您应该使用decimal(38,19)或其他东西。 scale参数用于小数点右边的位数,因此将其设置为38仅表示介于-1和1之间的数字。