Как сделать так, чтобы NumberFormatter форматировал число в процентах, не переосмысливая его? - PullRequest
0 голосов
/ 24 января 2020

Пример кода:

$fmt = new NumberFormatter('sv_SE', NumberFormatter::PERCENT);
var_dump($fmt->format(99.99));

Ожидаемый результат:

string(9) "99,99 %"

Фактический вывод:

string(9) "9 999 %"

Анализ:

Я должен быть "отсутствует" что-то". У меня уже есть процентное число (девяносто девять и девяносто девять), и все, что я хочу, это вывести его соответствующим образом для данной комбинации языка и локали. Например, в США это «99,99%» с точкой для десятичной запятой и без пробела между процентным числом и знаком процента, а в Швеции это «99,99%» с запятой для десятичной запятой и пространство между. Вероятно, есть множество других правил в других локалях / языках, с которыми я только что не сталкивался.

Я делаю , а не хочу PHP, чтобы "продолжить обработку" числа, которое я кормлю это никак. Уже сделано". Больше никакой обработки не требуется.

Я, честно говоря, даже не понимаю, почему PHP превращает его в "9999", когда он явно задан как число с плавающей точкой, как 99,99 ...

Is есть какая-то скрытая опция, чтобы отключить эту «дальнейшую обработку» числа?

1 Ответ

0 голосов
/ 24 января 2020

NumberFormatter предполагает, что число составляет от 0 до 1 в вашем случае 99,99 / 100 === 0,9999, поэтому вы можете использовать его следующим образом:

$fmt = new NumberFormatter('sv_SE', NumberFormatter::PERCENT);
var_dump($fmt->format(99.99/100));

Из чтения документации Я очень сомневаюсь, что есть какой-то другой путь.

...