PHP:将字符串转换为浮点数(仅当字符串表示浮点数时)

时间:2019-03-22 15:45:37

标签: php string type-conversion

我有一个unknwon字符串,可以类似于浮点数。在那种情况下,我想将其转换为浮点数(用于计算),否则将其保留为字符串。

如何检测字符串表示浮点数?

$a = "1.23";        // convert $a to 1.23
$b = "1.2 to 1.3";  // leave $b as is

自动string conversion会将后者转换为1.2,但这不是我想要的。

5 个答案:

答案 0 :(得分:5)

您可以使用is_numeric()函数检查可能包含数字的变量。 例如:

$a = "1.23";
if (is_numeric($a)) {
    $a = (float)$a;
}

$b = "1.2 to 1.3";
if (is_numeric($b)) {
    $b = (float)$b;
}

var_dump([
    'a' => $a,
    'b' => $b
]);

输出

  

array(size = 2)'a'=>浮点数1.23'b'=>字符串'1.2至1.3'   (长度= 10)

答案 1 :(得分:3)

您可以使用以下命令检查字符串是否为浮点数:

$a = "1.23";
$isFloat = ($a == (string)(float)$a);

答案 2 :(得分:2)

function StrToFloat($var){
    if(is_numeric($var)){
        return (float)$var;
    } else return $var;
} 

$a = "1.23";        // convert $a to 1.23
$b = "1.2 to 1.3";  // leave $b as is

$a = StrToFloat($a); // $a = 1.23
$b = StrToFloat($b); // $b = "1.2 to 1.3"

答案 3 :(得分:1)

因为没有被提及

if(preg_match('/^\d+\.\d+$/', $string)){
   $float = (float)$string;
}

我认为is_numeric是更好的选择,但这也可以。

我上面的内容只匹配浮点数,因此它们必须有小数点。为此,请使用/^\d+(\.\d+)?$/

  • ^字符串的开头
  • \d+一个或多个数字
  • \.点,字面意思
  • \d+一个或多个数字
  • $字符串结尾

对于第二个/^\d+(\.\d+)?$/,除了添加内容外,其他与上述相同:

  • (...)?可选捕获组,匹配此色标0或1次。

现在应该显而易见的是使小数成为可选内容的原因。

干杯!

答案 4 :(得分:0)

也许您想使用non-locale-aware floatval function

  

float floatval ( mixed $var )-获取字符串的浮点值。

文档中的示例:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343