将字符串转换为 int 或 float

问题描述 投票:0回答:8

我正在寻找一个函数,可以根据字符串的内容将数字字符串转换为整数或浮点类型,例如“1.23” -> 浮点数 1.23,“123” -> 整数 123。

我知道我可以将 if-s 与 is_int、is_float 一起使用并转换为适当的类型 - 但也许有一个函数可以自动执行此操作?

php string casting numeric
8个回答
41
投票

不,没有任何功能提供自动投射。但是,您可以使用这个简单的 hack 进行转换(转换是由 PHP 在内部自动进行的):

$int = "123"+0;
$float = "1.23"+0;

通用号码:

$yourNumberCasted = $yourStringNumber + 0;

具有功能:

function castToNumber($genericStringNumber) { 
    return $genericStringNumber+0; 
}
$yourNumberCasted = castToNumber($yourStringNumber);

2
投票

您可以使用以下行满足您的要求。

 $i = "1.23";       
 echo $c = (double)$i; // will return 1.23

 $i = "123";       
 echo $c = (double)$i; // will return 123

1
投票

没有内置函数可以执行此操作,但您可以快速创建自己的函数。

function castNumber($n)
{
   if(!is_numeric($n)) return 0;
   return (is_float($n)) ? (float) $n : (int) $n;
}

并使用它:

$casted = castNumber($num_to_cast);

0
投票

这些都不适合我。但这是我的解决方案:


$numString = '1.0';
$intOrFloat = (strpos($numString, '.') !==false) ? floatval($numString) : intval($numString);


0
投票

如果您的传入值是脏的(例如用户提供的),因此不能保证是数字,从 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; 
}

0
投票

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

0
投票

尽管这个问题很老了,我想为这个问题添加一个新的解决方案。毫无疑问,最好的答案是 antoox 提供的答案,但是正如已经指出的那样,它有一个小缺点......尚不清楚“+ 0”在做什么。

一个不言自明的简洁解决方案是:

$intOrFloat = floatval($str) ? (float)$str : (int)$str;

-1
投票

有一个函数

intval()
,它的作用与其他答案中提到的类型转换几乎相同,但它不能用于对象。

也具有相同的功能:

boolval()
floatval()

© www.soinside.com 2019 - 2024. All rights reserved.