Я пытаюсь написать функцию общего назначения для форматирования десятичных чисел, которая работает с любым количеством десятичных знаков, сохраняя исходное количество десятичных знаков.
Вот что у меня есть (в тесте):
setlocale(LC_MESSAGES, 'en_US'); $formatter = новый \NumberFormatter('en_US', \NumberFormatter::DECIMAL); $номер = 1234,56789; $this->assertEquals('1,234.56789', $formatter->format($num, \NumberFormatter::TYPE_DOUBLE)); ... но ничего не получится:
Не удалось подтвердить равенство двух строк. Ожидается: '1 234,56789' Фактический: '1 234,568' Добавив эту строку:
echo 'MAX_FRACTION_DIGITS: '. $formatter->getAttribute(\NumberFormatter::MAX_FRACTION_DIGITS) . PHP_EOL; ... Мне удалось определить, что по умолчанию NumberFormatter округляет число до 3 цифр.
Установка большого числа для MAX_FRACTION_DIGITS следующим образом:
$formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 100); ... даст мне то, что я хочу, но я уверен, что что-то упускаю.
Есть ли менее хакерский способ сделать то, что я хочу?