Ложно добавленная точность с помощью 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.
2 answers
В нескольких версиях PHP есть ошибка с плавающей запятой.
Либо вы можете выполнить запрос, например:
SELECT tl.ID, round(tl.Transaction_Amount, 2) FROM transactionLog tl
, Или обновите свою версию php.
В итоге мы "решили" это, используя идею, аналогичную Как я могу форматировать числа в виде денег в JavaScript? ответ, который, хотя и не идеален, работает достаточно хорошо и приемлем в этом случае использования.