Ложно добавленная точность с помощью PDO, PHP и sybase


У меня есть запрос, который напоминает то, что следует ниже. Я получаю другие результаты от PDO/PHP, чем в интерактивном приглашении SQL на сервере. При выполнении этого запроса через интерактивный SQL я правильно вижу суммы транзакций (т.Е. 45.34).

Когда я извлекаю результаты через PDO, я вижу неправильные результаты с ложно добавленной точностью (т.Е. 45.3400000000001). Есть ли в PDO что-то, что можно настроить для возврата этих данных, хранящихся в база данных?

Select tl.ID
       , tl.Transaction_Amount
from transactionLog tl

Обновление: Данные, возвращенные из запроса, форматируются в json. Я проверил, что данные до json также содержат ложные данные. Один ответ от antoox предполагает округление на уровне базы данных в запросе. Это, к сожалению, не помогает, так как запрос возвращает правильные данные при запуске в командной строке SQL, и округленный или нет отображается неправильно, как только он прошел через PDO. Ошибка PHP #53632 также упоминается antoox. К сожалению, эта ошибка не является фактором наша среда, в которой мы находимся, гораздо более поздняя версия.

Обновление: Поле базы данных имеет числовой размер 10 с масштабом 2, как сообщает Sybase Central.

Author: wilbbe01, 2013-05-15

2 answers

В нескольких версиях PHP есть ошибка с плавающей запятой.

Либо вы можете выполнить запрос, например:

SELECT tl.ID, round(tl.Transaction_Amount, 2) FROM transactionLog tl

, Или обновите свою версию php.

 0
Author: antoox, 2013-05-15 14:49:46

В итоге мы "решили" это, используя идею, аналогичную Как я могу форматировать числа в виде денег в JavaScript? ответ, который, хотя и не идеален, работает достаточно хорошо и приемлем в этом случае использования.

 0
Author: wilbbe01, 2017-05-23 10:25:14