我有一个类似于下面的查询。我从 PDO/PHP 得到的结果与在服务器上的交互式 SQL 提示符中得到的结果不同。通过交互式 SQL 运行此查询时,我正确地看到了交易金额(即 45.34)。
当我通过 PDO 提取结果时,我看到不正确的结果以及错误添加的精度(即 45.3400000000001)。 PDO 中是否有一些东西可以设置为返回存储在数据库中的数据?
Select tl.ID
, tl.Transaction_Amount
from transactionLog tl
更新:正在将查询返回的数据格式化为 json。我已验证 pre-json 数据也包含虚假数据。 antoox 的一个答案建议在查询中的数据库级别进行舍入。不幸的是,这并没有帮助,因为查询在 SQL 提示符下运行时返回正确的数据,并且一旦通过 PDO 就四舍五入或不正确地显示。 Antoox 还提到了 PHP 错误 #53632。不幸的是,这个错误不是我们环境中的一个因素,因为我们使用的是更新的版本。
更新:根据 Sybase Central 的报告,数据库字段的数字大小为 10,标度为 2。
最佳答案
几个版本的 PHP 都有一个 floating point bug .
您可以执行如下查询:
SELECT tl.ID, round(tl.Transaction_Amount, 2) FROM transactionLog tl
,或者更新你的php版本。
关于php - 使用 PDO、PHP 和 sybase 错误地增加了精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16568126/