我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
当前回答
您通常不需要这样做,因为在大多数情况下,PHP会强制您使用类型。对于确实要显式转换类型的情况,请将其强制转换为:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
其他回答
$a = "10";
$b = (int)$a;
您可以使用它在PHP中将字符串转换为int。
您通常不需要这样做,因为在大多数情况下,PHP会强制您使用类型。对于确实要显式转换类型的情况,请将其强制转换为:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
下面是我为自己编写的一个函数:
它还返回布尔、整数、双精度和实数的简写版本。
function type($mixed, $parseNumeric = false)
{
if ($parseNumeric && is_numeric($mixed)) {
//Set type to relevant numeric format
$mixed += 0;
}
$t = gettype($mixed);
switch($t) {
case 'boolean': return 'bool'; //shorthand
case 'integer': return 'int'; //shorthand
case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
default: return $t;
}
}
调用parseNumeric设置为true的类型将在检查类型之前转换数字字符串。
因此:
type(“5”,true)将返回int
类型(“3.7”,true)将返回float
类型(“500”)将返回字符串
只是要小心,因为这是一种错误检查方法,而实际变量仍然是字符串。如果需要,您需要将实际变量转换为正确的类型。我只需要它来检查数据库是否应该加载项id或别名,这样就不会产生任何意外的影响,因为它在运行时将被解析为字符串。
Edit
如果要检测对象是否为函数,请在开关中添加以下情况:
case 'object': return is_callable($mixed)?'function':'object';
如果你事先不知道你有一个浮点数还是一个整数,如果字符串可能包含特殊字符(如空格、欧元等),并且如果它可以包含多于1个点或逗号,您可以使用此功能:
// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
// return 0 if the string contains no number at all or is not a string:
if (!is_string($string) || !preg_match('/\d/', $string)) {
return 0;
}
// Replace all ',' with '.':
$workingString = str_replace(',', '.', $string);
// Keep only number and '.':
$workingString = preg_replace("/[^0-9.]+/", "", $workingString);
// Split the integer part and the decimal part,
// (and eventually a third part if there are more
// than 1 decimal delimiter in the string):
$explodedString = explode('.', $workingString, 3);
if ($explodedString[0] === '') {
// No number was present before the first decimal delimiter,
// so we assume it was meant to be a 0:
$explodedString[0] = '0';
}
if (sizeof($explodedString) === 1) {
// No decimal delimiter was present in the string,
// create a string representing an integer:
$workingString = $explodedString[0];
} else {
// A decimal delimiter was present,
// create a string representing a float:
$workingString = $explodedString[0] . '.' . $explodedString[1];
}
// Create a number from this now non-ambiguous string:
$number = $workingString * 1;
return $number;
}
我一直在阅读答案,没有看到任何人提到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字符串如何转换为各自的数字