У меня возникли проблемы с использованием класса php NumberFormatter. Я хочу, чтобы округленные цифры отображались без каких-либо десятичных знаков, а цифры с десятичными знаками округлялись с двумя десятичными знаками. т.е.Форматирование валюты с использованием numberFormatter
$fmt = new NumberFormatter('nl', NumberFormatter::CURRENCY);
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0);
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 2);
var_dump($fmt->formatCurrency(15.15, 'EUR')); //Outputs € 15,15
var_dump($fmt->formatCurrency(15, 'EUR')); //Outputs € 15,00
Как вы можете видеть последний дамп вывода 15,00
, но я ожидал 15
здесь. Всякий раз, когда я использую «полный» язык nl_NL
вместо nl
, форматтер ведет себя так, как ожидалось, но я не могу использовать это, потому что у меня есть только язык, доступный в моей локали.
$fmt = new NumberFormatter('nl_NL', NumberFormatter::CURRENCY);
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0);
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 2);
var_dump($fmt->formatCurrency(15.15, 'EUR')); //Outputs € 15,15
var_dump($fmt->formatCurrency(15, 'EUR')); //Output € 15
Это похоже на ошибку в NumberFormatter, но я действительно понятия не имею, как это исправить, или выяснить, какой-то другой обходной путь. Я был бы очень благодарен за любую помощь.
Определенно выглядит как ошибка. Если это действительно так, исправление заключается не в использовании NumberFormatter, а в создании собственного. Для быстрого исправления вы можете запросить форматированную валюту для 00 в конце строки и просто отключить ее, если она истинна. –
Спасибо за ваш комментарий. Написание собственного кода на самом деле не является вариантом, так как у нас есть сайт со многими языками. Я мог бы реализовать такое грязное исправление, если у кого-то еще нет лучшего решения. –