我的库存数据库中有2个值。一个是QtyOnHand(浮动),另一个是计算该项目的所有库存交易(想想SUM(TransQty)
,其中transQty也是浮点数)。问题是,随着时间的推移,由于未知原因,这些值中的某些值不同步。所以现在我正在努力清理它们。
基本上,我正在使用QtyOnHand(我们宣称这是准确的),并从中减去交易总额。然后对差异的交易进行更正。这很有效,直到我们得到具有大量“十进制尘埃”的数字。此外,即使在实际值更像0
的情况下,浮动似乎也会显示0.0000000000000000237
。
以下是我无法纠正的一些数据。
科学记谱法的项目给我带来了麻烦。即使显示项目PLXL-105-H的行显示-18,-18也不能准确显示,因为我的查询仅返回超出1%不匹配的值。我一直在完全使用TSQL,它是否有助于操纵C#程序的值?
所以,这是我的问题:我应该如何处理这些数字?我已经尝试将它们转换为DECIMAL(38,38),但这给了我算术溢出。我需要获得表示差异的准确值,然后使用该值来平衡问题。
答案 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之间的数字。