Нашел ошибку в функции NumberFormatter * formatCurrency в PHP? - PullRequest
4 голосов
/ 22 января 2020

Мне точно известно, как валюта "SEK" (Swedi sh money) должна быть отформатирована в локали "SE" (Швеция) с языком "sv" (Swedi sh). Предполагается использовать периоды для тысяч разделителей. Однако следующий пример минимального кода покажет, что PHP выводит его с пробелами вместо точек для разделителей тысяч. делает правильную запятую (для десятичного знака), а также "kr" в конце, поэтому я не знаю, что из этого сделать:

// Пример кода № 1 (работает правильно):

$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
var_dump($a->formatCurrency(123456789.987, 'USD'));

Expected output:

    $123,456,789.99

Actual output:

    $123,456,789.99

// Пример кода № 2 (похоже, не работает правильно):

$a = new \NumberFormatter('sv_SE', \NumberFormatter::CURRENCY);
var_dump($a->formatCurrency(123456789.987, 'SEK'));

Expected output:

    123.456.789,99 kr

Actual output:

    123 456 789,99 kr

Какая это может быть причина? Это так расстраивает, что "почти" понял все правильно.

1 Ответ

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

Это работает, но это хак:

$a = new \NumberFormatter('sv_SE', \NumberFormatter::CURRENCY);
$a->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '.'); 
$a->setPattern('#,##0.## kr');
var_dump($a->formatCurrency(123456789.987, 'SEK'));

Вывод:

string(17) "123.456.789,99 kr" 
...