Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с округлением float при конвертации массива в json #30

Open
Daniel217D opened this issue Apr 3, 2024 · 0 comments

Comments

@Daniel217D
Copy link

Проблема проявляется на версии PHP >=7.1 + должна быть выставлена директива serialize_precision на значение 100 или больше

В методе RobokassaPayAPI::createForm при конвертации массива $receipt в $receiptJson с помощью json_encode цены заданные числами типа float могут быть закодированы с длинным хвостом, так как float преобразуется с захватом погрешности, которая начинается примерно с тридцатого знака.

Простой способ воспроизвести проблему с округлением: json_encode( 472.185 ) вернет "472.18500000000000227373675443232059478759765625". Такие числа могут добавлять лишние копейки к заказам и ломают странно выглядят на странице оплаты
image

Варианты решения:

  1. Добавить в php.ini строку serialize_precision=1, если на сервере доступно редактирование php.ini
  2. Требуется доработать функцию robokassa_payment_createFormWC, которая формирует массив $receipt и преобразовывать цены в строку ($current['cost'] и $current['sum'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant