我尝试将 PHP 浮点值 63.59072952118762 存储到 postgres 中的双精度列中。Postgres 将该值存储为 63.59073。有谁知道为什么?对于该值,8 字节应该绰绰有余。我已经尝试过使用数字数据类型,它在指定精度时有效,但这并不是必需的。
更新:在尝试存储 63.5907295 时也存在同样的问题,因此在存储之前双倍发生某些事情的建议似乎是现实的。
更新二(部分解决):我分配双参数的行如下所示:
$stmt->bindParam(4, $this->latitude);
我不知道的是 PDO 将其参数类型默认为字符串。我将其更改为 PDO::PARAM INT 缺乏更好的选择(PARAM DOUBLE 不是一个选项),并且在存储在 postgres 中的双精度中获得了 10 位精度(至少有一些进展)。我已经检查过 numeric 类型是否运行良好,因此在使用 PDO 和必须具有超过 10 位小数的精度的双精度时,numeric 似乎是要走的路。
无论如何,正如有人提到的那样,我不知道我是否必须拥有这种精度,但我认为这个问题本身就值得研究。