如何将number_format的输出转换回PHP中的数字?

问题描述 投票:36回答:8

PHP无法识别1,200.00(由number_format生成),但只能识别1200.00

这个问题的一般解决方案是什么?

php
8个回答
26
投票

你可以删除任何不是数字或小数点的字符,并使用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)));
}

18
投票

如果您使用5.3或更高版本(感谢ircmaxell),请使用numfmt_parse


6
投票

您可以使用filter_var。例如

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

将输出:

1200998

5
投票

更好的方法是使用number_format函数本身的选项格式为number_format(float $ number,int $ decimals = 0,string $ dec_point ='。',string $ thousands_sep =',')

即如果你不需要格式化字符串中的','就像它一样

$ num = 23.33333

echo number_format($ num,2,'。','');

如果你需要它作为float然后类型转换相同浮动$ floatnum =(float)number_format($ num,2,'。','');

希望这可以帮助

感谢Shyam高级PHP开发人员TunerLabs


5
投票

使用 ; Sanitize filters

$ 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

2
投票

你可以做$num = (float) str_replace(',', '', $num);基本上,只需删除逗号,然后将其转换为数字类型(float或int)。


1
投票

我使用以下代码:

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

    return $result;
}

0
投票

在这种情况下,你可以使用PHP round方法:round (12.000000, 2);

© www.soinside.com 2019 - 2024. All rights reserved.