我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

当前回答

有一种方法:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

使用is_*不起作用,因为变量是:string。

使用json_encode()和json_edecode()的组合将其转换为“真”形式。如果它是真字符串,则输出错误。

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

将输出:string(2)“Me”int(0)float(0)

其他回答

您通常不需要这样做,因为在大多数情况下,PHP会强制您使用类型。对于确实要显式转换类型的情况,请将其强制转换为:

$num = "3.14";
$int = (int)$num;
$float = (float)$num;

在任何(松散类型)语言中,您都可以通过在数字上加一个零来将字符串转换为数字。

然而,这没有什么意义,因为PHP将在使用此变量时自动执行,并且在输出时无论如何都将转换为字符串。

请注意,您可能希望将虚线保留为字符串,因为在强制转换为浮点数后,由于浮点数的性质,它可能会发生不可预测的变化。

这是实现您所需功能的函数。首先,我们检查该值是否可以理解为数字,如果可以,我们将其转换为int和float。如果int和float相同(例如,5==5.0),则返回int值。如果int和float不相同(例如,5!=5.3),那么我们假设您需要float的精度并返回该值。如果值不是数字,我们将抛出警告并返回null。

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}

我一直在阅读答案,没有看到任何人提到PHP数字转换中最大的警告。

最受欢迎的答案是:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

太棒了。PHP进行直接铸造。但如果我们做了以下操作呢?

$str = "3.14is_trash"
$intstr = (int)$str

PHP认为这种转换有效吗?

显然是的。

PHP读取字符串,直到找到所需类型的第一个非数字字符。这意味着对于整数,数字字符是[0-9]。因此,它读取3,因为它在[0-9]字符范围内,所以它继续读取。读取。并在那里停止,因为它不在[0-9]范围内。

同样的情况也会发生,如果你被投到浮动或双倍。PHP将读取3。,然后是1,然后是4,并将在i处停止,因为它不是有效的浮点数字字符。

因此,“million”>=1000000计算结果为假,但“10000000000”>=10000计算结果为真。

另请参见:

https://www.php.net/manual/en/language.operators.comparison.php比较时如何进行转换

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion字符串如何转换为各自的数字

所有建议都会丢失数字类型。

在我看来,这是一个最佳实践:

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}