Как преобразовать вывод number_format обратно в числа в PHP?

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; }