Подтвердить что ты не робот

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

PHP не может распознать 1,200.00 (сгенерированный number_format), но только 1200.00,

Какое общее решение для этой проблемы?

4b9b3361

Ответ 1

Вы можете удалить любой символ, который не является цифрой или десятичной точкой, и проанализировать это с помощью 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)));
}

Ответ 2

Если вы используете 5.3 или выше (спасибо ircmaxell), используйте numfmt_parse.

Ответ 3

Лучше всего использовать параметры в самой функции 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

Ответ 4

Вы можете использовать filter_var. например.

$num = '1,200,998';
$real_integer = filter_var($num, FILTER_SANITIZE_NUMBER_INT));
echo $real_integer;

выведет:

1200998

Ответ 5

использование; Фильтры санитарии

$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

Ответ 6

Вы можете сделать $num = (float) str_replace(',', '', $num); В принципе, просто избавиться от запятых, а затем использовать его как числовой тип (float или int).

Ответ 7

Я использую следующий код:

function remove_non_numerics($str)
{ 
    $temp       = trim($str);
    $result  = "";
    $pattern    = '/[^0-9]*/';
    $result     = preg_replace($pattern, '', $temp);

    return $result;
}