我的代码出现问题,其中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_DIGITS
,NumberFormatter::MIN_FRACTION_DIGITS
和NumberFormatter::FRACTION_DIGITS
而没有任何影响。请注意,如果有更好的方法将预期数字的格式与输入的数字格式进行比较,请随意提出比这更好的建议:
if(strcmp(strval($fmt->parse($number)),strval($number)) != 0)
{
$number = FALSE;
}