我尝试将 PHP 浮点值 63.59072952118762 存储到 postgres 中的双精度列中。Postgres 将该值存储为 63.59073。有谁知道为什么?8 个字节对于该值来说应该绰绰有余。我尝试过使用数字数据类型,它在指定精度时有效,但这实际上并不是必要的。

更新: 当尝试存储 63.5907295 时也存在同样的问题,因此在存储 double 之前发生一些事情的建议似乎是现实的。

更新二(部分解决):我分配双参数的行如下所示:

$stmt->bindParam(4, $this->latitude);

我不知道的是 PDO 默认其参数类型为字符串。由于缺乏更好的替代方案(PARAM DOUBLE 不是一个选项),我将其更改为 PDO::PARAM INT,并且在 postgres 中存储的双精度数中获得了 10 位精度(至少取得了一些进展)。我已经检查过数字类型工作得很好,所以看起来数字是使用 PDO 和精度必须超过 10 位小数的双精度数时的最佳选择。

无论如何,正如有人提到的,我不知道我是否必须拥有这种精度,但我认为问题本身值得调查。

有帮助吗?

解决方案

  • 你怎么确定什么PostgreSQL是储存?
  • 你怎么发送的数据PostgreSQL?
  • 你怎么得到的数据再回来吗?
  • 你怎么显示?
  • 什么类型列的数据库?

有许许多多的地方之间的路径PHP和PostgreSQL那里有可能混淆关于如何表示的数据。


重要的是要解释如何数据插入DBMS。使用文字值的插入的发言导致了一组不同的问题,从使用定参数。如果你写的价值在SQL:

INSERT INTO SomeTable(SomeColumn) VALUES(63.xxxxxxxxx);

和数据是截断了,你会有一个问题在PostgreSQL。如果你绑的可变的,你已经可以肯定的是要了解什么PHP和公设辩护人PostgresSQL模块的价值是它作为一个双人,或者作为一串,其交易代码转换等等。

你遇到类似问题与Perl+论+阻挡::YourDBMS(阻挡::Pg在你的情况)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top