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

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

当前回答

我一直在阅读答案,没有看到任何人提到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字符串如何转换为各自的数字

其他回答

现在我们正处于一个严格/强类型在PHP中具有更大重要性的时代,我使用json_decode:

$num = json_decode('123');

var_dump($num); // outputs int(123)

$num = json_decode('123.45');

var_dump($num); // outputs float(123.45)

您只需将0添加到字符串中,即可将其转换为数字,而不会丢失初始原始值。举个例子:

dd('0.3454545' + 0)

PHP将为您处理转换,或者按照已经建议在字符串前添加+。

您可以使用:

(int)(your value);

或者您可以使用:

intval(string)

派对迟到了,但这里有另一种方法:

function cast_to_number($input) {
    if(is_float($input) || is_int($input)) {
        return $input;
    }
    if(!is_string($input)) {
        return false;
    }
    if(preg_match('/^-?\d+$/', $input)) {
        return intval($input);
    }
    if(preg_match('/^-?\d+\.\d+$/', $input)) {
        return floatval($input);
    }
    return false;
}

cast_to_number('123.45');       // (float) 123.45
cast_to_number('-123.45');      // (float) -123.45
cast_to_number('123');          // (int) 123
cast_to_number('-123');         // (int) -123
cast_to_number('foo 123 bar');  // false
$a = "10";

$b = (int)$a;

您可以使用它在PHP中将字符串转换为int。