【发布时间】:2013-08-01 22:40:47
【问题描述】:
我知道当您使用 Money 时,最好(如果不是必须的话)使用 Decimal 数据类型,尤其是当您使用 Large Amount of Money 时:) .但我想将我的产品价格存储为内存要求较低的float 数字,因为它们并不真正需要这样的精度。现在,当我想计算所售产品的全部收入时,它可能会变成一个非常大的数字,而且它也必须具有很高的精度。我想知道如果我在 SQL 查询中通过 SUM 关键字进行此求和会产生什么结果。我想它将存储在Double 变量中,这肯定会失去一些精度。如何强制它使用Decimal 数字进行计算?也许了解 SQL 引擎内部的人可以回答我的问题。很高兴提到我使用 Access Database Engine,但任何一般性的答案也将不胜感激。这可能是我将使用的查询示例:
SELECT SUM(Price * Qty) FROM Invoices
或
SELECT SUM(Amount) FROM Invoices
Amount 和 Price 存储为 float(Single) 数据类型,Qty 存储为 int32。
【问题讨论】:
-
如果您有任何具有非整数值的昂贵项目,则使用 32 位浮点数的最初决定会产生风险。美分数字不再有意义,小数点前有 6 位数字。将值存储、乘以和求和为整数美分(或适当的最小货币单位)可能会更好。
-
@PatriciaShanahan 不,我最初的决定没有风险。因为物品远没有那么贵。它们都低于 1000 美元,无需精确到美分。但是您关于存储
integer美分的观点似乎很有趣。虽然当我向用户展示它们时,我总是必须做将它们转换为 $s 的附加工作。 -
以浮点数形式存储的数量是多少?
-
Amount=Qty*Price但qty通常是一个小的 2 3 max 10 数字,如果它更多(例如批发 100),那么我们不需要精度(30.5 * 100 = 3050)。所以我想我可以将Amount和Price安全地存储为float数字。 float 允许 7 位精度。所以我可以存储 99999.99$。我们真的不需要更多。当您进行求和时会出现问题。
标签: sql ms-access floating-point sum decimal