PHP numberformatter :: parse截断小数

时间:2018-03-14 12:02:26

标签: php locale numberformatter

我的代码出现问题,其中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 返回结果为FALSE

所以你可以看到该解析正在截断50.00到50.我尝试过使用NumberFormatter::MAX_FRACTION_DIGITSNumberFormatter::MIN_FRACTION_DIGITSNumberFormatter::FRACTION_DIGITS而没有任何影响。请注意,如果有更好的方法将预期数字的格式与输入的数字格式进行比较,请随意提出比这更好的建议:

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

0 个答案:

没有答案