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

use*_*729 36 php

PHP无法识别1,200.00(所产生的number_format),但只1200.00,

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

Gum*_*mbo 27

您可以删除任何不是数字或小数点的字符,并使用以下方法解析floatval:

$number = 1200.00;
$parsed = floatval(preg_replace('/[^\d.]/', '', number_format($number)));
var_dump($number === $parsed);  // bool(true)
Run Code Online (Sandbox Code Playgroud)

如果数字不是.小数点:

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)));
}
Run Code Online (Sandbox Code Playgroud)


Don*_*nie 18

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


Fre*_*ric 7

您可以使用filter_var.例如

$num = '1,200,998';
$real_integer = filter_var($num, FILTER_SANITIZE_NUMBER_INT);
echo $real_integer;
Run Code Online (Sandbox Code Playgroud)

将输出:

1200998
Run Code Online (Sandbox Code Playgroud)


irc*_*ell 5

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

  • `$locale = localeconv();`,然后将上面的`','`改为`$locale['thousands_sep']`... (3认同)

小智 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

使用 ; 消毒过滤器

$ 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
Run Code Online (Sandbox Code Playgroud)