这个简单的postgres循环调用将数字舍入为3位小数,如预期的那样:
SELECT round(43.1235421,3);
round
--------
43.124
(1 row)
但是,下面查询中完全相同的舍入操作会给我43.1240000000000023
。该查询针对postgis数据库运行,以防万一。
(SELECT ogc_fid,wkb_geometry,round(43.1235421,3) AS lat FROM grid_1) AS "grid"
这种行为是不受欢迎的。我究竟做错了什么?如何按预期将浮点数四舍五入到小数点后3位?提前谢谢。
编辑:我尝试在postgis查询中明确地将float转换为数字,但结果相同。
(SELECT ogc_fid,wkb_geometry,round(43.1235421::numeric,3) AS lat FROM grid_1) AS "grid"
答案 0 :(得分:1)
两者给出相同的答案,postgis只是在结果中给出了更多的小数位,其中一些是毫无价值的。浮点数很少精确,只有少数几个部分具有精确的二进制表示,0.2不是其中之一。如果将结果扩展到足够的位置,您将开始看到准确度。
如果你需要base-10 precision,请使用numeric而不是float。
如果你仍然想要花车,但想要隐藏丑陋的部分
SET extra_float_digits TO 0;