PHP не может распознать 1,200.00
(сгенерированный number_format
), но только 1200.00
,
Какое общее решение для этой проблемы?
PHP не может распознать 1,200.00
(сгенерированный number_format
), но только 1200.00
,
Какое общее решение для этой проблемы?
Вы можете удалить любой символ, который не является цифрой или десятичной точкой, и проанализировать это с помощью floatval
:
$number = 1200.00;
$parsed = floatval(preg_replace('/[^\d.]/', '', number_format($number)));
var_dump($number === $parsed); // bool(true)
И если число не имеет .
в качестве десятичной точки:
function parse_number($number, $dec_point=null) {
if (empty($dec_point)) {
$locale = localeconv();
$dec_point = $locale['decimal_point'];
}
return floatval(str_replace($dec_point, '.', preg_replace('/[^\d'.preg_quote($dec_point).']/', '', $number)));
}
Если вы используете 5.3 или выше (спасибо ircmaxell), используйте numfmt_parse.
Лучше всего использовать параметры в самой функции number_format Формат number_format (float $number, int $decimals = 0, string $dec_point = '.', string $thousand_sep = ',')
т.е. если вам не нужно "," в сформованной строке, сделайте это как
$Num = 23,33333
echo number_format ($ num, 2, '.', '');
если вам нужно это как float, тогда приведите то же самое к float $ floatnum = (float) number_format ($ num, 2, '.', '');
Надеюсь, что это поможет
Спасибо Shyam Старший разработчик PHP TunerLabs
Вы можете использовать filter_var. например.
$num = '1,200,998';
$real_integer = filter_var($num, FILTER_SANITIZE_NUMBER_INT));
echo $real_integer;
выведет:
1200998
использование; Фильтры санитарии
$number1 = '$ 1,989.34';
$number2 = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);//1989.34
$number2 = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);//1,98934
Вы можете сделать $num = (float) str_replace(',', '', $num);
В принципе, просто избавиться от запятых, а затем использовать его как числовой тип (float или int).
Я использую следующий код:
function remove_non_numerics($str)
{
$temp = trim($str);
$result = "";
$pattern = '/[^0-9]*/';
$result = preg_replace($pattern, '', $temp);
return $result;
}