php - 使用 PDO、PHP 和 sybase 错误地增加了精度

标签 php pdo sybase

我有一个类似于下面的查询。我从 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/

相关文章:

php - laravel/laravel vs laravel/框架

php - 无法在 Laravel 的 app.scss 中导入 "bootstrap-select"

php - PDO 使用 where 子句选择多个表

while-loop - While 循环永远持续下去

sybase - INSERT 失败,因为以下 SET 选项仅在 Perl Sybase 中设置不正确

php - 如何在没有 ssh 的 cpanel 专用服务器中安装 ffmpeg-php 包

php - 插入时自动截断数据

mysql - 计数并执行插入或更新

android - 在 android SETUP 应用程序中使用多个用户

php - 无法更新 mysql 表超过 10000 条记录