locale — формат числа PHP :: parse усекает десятичные дроби

У меня проблема с моим кодом, где NumberFormatter :: parse () усекает десятичные дроби, когда есть конечный ноль. Наше приложение использует Intl, чтобы быть в курсе локали, поэтому я выполняю вызов JSON API, чтобы убедиться, что число, введенное в форму, действительно является числом. Например, когда локаль вызывает запятую в качестве десятичного разделителя, возвращайте FALSE для чисел, введенных с точкой.

function parse_decimals($number)
{
// ignore empty strings and return
if(empty($number))
{
return $number;
}

$config    = get_instance()->config;
$fmt       = new \NumberFormatter( $config->item('number_locale'), \NumberFormatter::DECIMAL);

$fmt->format(1234567890.12300);

if (empty($config->item('thousands_separator')))
{
$fmt->setAttribute(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
}

try
{
if(strcmp(strval($fmt->parse($number)),strval($number)) != 0)
{
$number = FALSE;
}
return $fmt->parse($number);
}
catch (Exception $e)
{
return FALSE;
}
}

Локаль не имеет значения (потому что она счастлива со всеми локалями, поэтому для аргумента Intl используется для установки локали на en_US.

Введено 50.00
Ожидаемое 50,00
Актуальные 50
Вернуть результат ЛОЖЬ

Итак, вы можете видеть, что синтаксический анализ усекает 50,00 до 50. Я попытался поиграть с NumberFormatter::MAX_FRACTION_DIGITS, NumberFormatter::MIN_FRACTION_DIGITS а также NumberFormatter::FRACTION_DIGITS без какого-либо эффекта. Примечание: если есть лучший способ сравнить формат ожидаемого числа с форматом введенного числа, чем этот, пожалуйста, не стесняйтесь предложить что-то лучшее, чем это:

if(strcmp(strval($fmt->parse($number)),strval($number)) != 0)
{
$number = FALSE;
}

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]