我正在尝试REAL
使用这样的简单查询对 800 万个浮点 ( ) 值求和:
SELECT SUM(metric) FROM metrics;
Run Code Online (Sandbox Code Playgroud)
但是,它返回的结果非常不准确。它应该返回 137,586.77,但它返回 137,303(283.77 差异)
有没有办法强制查询更精确?
根据 REAL 数据类型http://www.postgresql.org/docs/9.2/static/datatype-numeric.html#DATATYPE-FLOAT的文档,它的精度为 6 位十进制数字。这就是你所看到的。如果您需要更高的精度,则需要使用 double 或具有固定精度的数字。
也许将实数转换为更精确的东西并总结结果会给你你需要的东西,例如:
SELECT SUM(metric::double) FROM metrics;
Run Code Online (Sandbox Code Playgroud)
如果您需要精确的存储和计算(例如货币金额),请改用数字类型。
由于您使用了 real 数据类型,因此您可以将实际值转换为数字。然后你就可以得到你预期的结果。
SELECT SUM(metric::NUMERIC) FROM metrics;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13823 次 |
最近记录: |