我有一个unknwon字符串,可以类似于浮点数。在那种情况下,我想将其转换为浮点数(用于计算),否则将其保留为字符串。
如何检测字符串表示浮点数?
$a = "1.23"; // convert $a to 1.23
$b = "1.2 to 1.3"; // leave $b as is
自动string conversion会将后者转换为1.2
,但这不是我想要的。
答案 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