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, тогда typecast то же самое для float $ floatnum = (float) number_format ($ num, 2, '.', '');
Надеюсь это поможет
Спасибо Shyam Senior PHP Developer 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; }