Почему в PHP в NumberFormatter используются никель-округленные швейцарские франки? - PullRequest
0 голосов
/ 11 февраля 2019

Использование метода formatCurrency() в классе NumberFormatter с валютой CHF (швейцарские франки) для меня округляет суммы до ближайшей суммы никеля (0,05) для меня.

Код:

$formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $formatter->formatCurrency('12.34', 'CHF');

Результат:

CHF12,35

Обратите внимание, что числовое значение 12,34 округляется до 12,35.Сначала я думал, что потенциально это ожидаемый и новый способ обращения с деньгами, с которым я незнаком.Оказывается, это не так, как это должно работать.(https://money.stackexchange.com/q/105014/81599)

Почему в PHP округляется до ближайшего количества никеля и как я могу это исправить?

1 Ответ

0 голосов
/ 11 февраля 2019

Ответ на самом деле лежит вне PHP, в библиотеке ICU , которую PHP переносит через расширение Интернационализация .Как оказалось, у меня была устаревшая версия (50.x) библиотеки ICU, в которой была ошибка округления никеля.Обновление до ближайшей библиотеки ICU (на сегодняшний день 63.1 ) позволит вам использовать самые современные стандарты интернационализации, включая это исправление.Я не уверен, , какое конкретное обновление ICU решило мою проблему, но я знаю, что последние исправления устраняют эту проблему.

Что касается того, почему это произошло, в первую очередь, Швейцария прекратила0,01 деноминации в их валюте, а самая низкая деноминация фактически составляет 0,05 с денежными суммами.Потенциально разработчики, работающие в отделении интенсивной терапии, запутались, читая, скажем, эту таблицу Юникода , что может показаться вводящим в заблуждение.

В связи с этим:

...