Странное поведение NumberFormatter

keltanas

marty cats
Приветствую!
Столкнулся со странным поведением NumberFormatter.

Код:
$ php -v
PHP 5.5.20-1+deb.sury.org~trusty+1 (cli) (built: Dec 21 2014 19:56:00)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
  with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
Код:
$ php -i | grep intl
/etc/php5/cli/conf.d/20-intl.ini,
intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0
Если применить хак в виде добавления какой-то незначительной доли 0.0001 то форматирует как надо

$ php -r 'var_dump((new \NumberFormatter("ru", \NumberFormatter::CURRENCY_SYMBOL))->format(200.0001));'
Код:
string(6) "200,00"
А если число без дроби, что выводит каракули

$ php -r 'var_dump((new \NumberFormatter("ru", \NumberFormatter::CURRENCY_SYMBOL))->format(200.00));'
Код:
string(6) "௨௱"
Проверил на ubuntu 14.04, 12.04 и windows 7 + php 5.5

Кто-нибудь знает, как с этим бороться?
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
keltanas, в конструкторе 2м аргументом принимается тип форматтера, а ::CURRENCY_SYMBOL - это не тип форматтера.
 

keltanas

marty cats
флоппик, спасибо тебе большое!

Однако, как же тогда вывести отформатированную валюту без указания денежного знака?
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Ты определись - ты выводишь валюту или без указания знака.
Если просто хочется вывести число в указанной локали, не надо использовать валютный формат. Используй
Код:
\NumberFormatter::DECIMAL
PHP:
$n = \NumberFormatter::create("ru", \NumberFormatter::DECIMAL);
$n->setAttribute(\NumberFormatter::FRACTION_DIGITS, 2);
print($n->format(200));
 
Сверху