我正在寻找一个函数,它可以将数字字符串转换为整数或浮点数类型,具体取决于字符串的内容,例如,“1.23”->浮点数1.23,“123”->整数123。
我知道我可以使用if-s与is_int、is_float和cast到适当类型 - 但也许有一个函数可以自动完成此操作吗?
不,没有任何函数可以提供自动转换。但是你可以使用这个简单的技巧进行强制类型转换(PHP在内部会自动进行转换):
$int = "123"+0;
$float = "1.23"+0;
对于通用数字:
$yourNumberCasted = $yourStringNumber + 0;
使用一个函数:
function castToNumber($genericStringNumber) {
return $genericStringNumber+0;
}
$yourNumberCasted = castToNumber($yourStringNumber);
$i = "1.23";
echo $c = (double)$i; // will return 1.23
$i = "123";
echo $c = (double)$i; // will return 123
没有内置函数可以完成这个任务,但你可以快速地创建自己的函数。
function castNumber($n)
{
if(!is_numeric($n)) return 0;
return (is_float($n)) ? (float) $n : (int) $n;
}
并使用它:
$casted = castNumber($num_to_cast);
is_float()
在字符串上始终返回false,因此该函数将始终将数字字符串转换为整数。 - ShaneOHreturn (is_float($n + 0)) ? (float) $n : (int) $n;
,它会更好地工作。 - CsZsombor○
function castToNumber1($genericStringNumber) {
return ((int)$genericStringNumber == (float)$genericStringNumber)
? (int)$genericStringNumber
: (float)$genericStringNumber;
}
×
function castToNumber2($genericStringNumber) {
return is_numeric($genericStringNumber) ? $genericStringNumber + 0 : 0;
}
糟糕的情况
// $hoge is float
$hoge = castToNumber2(1.2E+2); // 120
这些方法都对我无效。但是这是我的解决方案:
$numString = '1.0';
$intOrFloat = (strpos($numString, '.') !==false) ? floatval($numString) : intval($numString);
如果您的输入值是脏数据(例如用户提供的),因此不能保证为数字,在 PHP 8.0 中,接受的解决方案将生成Fatal error: Uncaught TypeError: Unsupported operand types: string + int
,而以前只是一个警告。
您可以在其中放置一个is_numeric()
并为非数字提供显式的0值。
function castToNumber($genericStringNumber) {
return is_numeric($genericStringNumber) ? $genericStringNumber + 0 : 0
}
function castToNumber($genericStringNumber) {
return ((int)$genericStringNumber == (float)$genericStringNumber)
? (int)$genericStringNumber
: (float)$genericStringNumber;
}
$intOrFloat = floatval($str) ? (float)$str : (int)$str;
有一个函数intval()
,它几乎与其他答案中提到的类型转换相同,但不能用于对象。
还有具有相同功能的函数:boolval()
和floatval()
。
0
(或乘以 1
)的技巧。 - Voitcus
(int)
或(float)
。你的解决方案非常优雅,但我倾向于在代码中加注释,因为它对读者来说并不明显它的作用。 - Karl M.W.function castToNumber($genericStringNumber) { return $genericStringNumber+0; }
- antoox