我有一个字符串:
$str = "CASH55.35inMyPocket";
我想只获得 55.35 。
我试过了:
$str = floatval("CASH55.35inMyPocket");
if ($str > 0) {
echo "Greater_Zero";
} else {
echo "LessZERO!!";
}
// echo "LessZERO!!";
我也尝试过:
$str = (float)"CASH55.35inMyPocket";
if ($str > 0) {
echo "Greater_Zero";
} else {
echo "LessZERO!!";
}
// echo "LessZERO!!";
根据文件:
字符串很可能会返回
0
,尽管这取决于 最左边的字符串。
所以,flotval
和(float)
显然只有在字符串类似的情况下才有效:
55.35aAbBcCdDeEfF
...但如果它像aAbBcC55.35dDeEfF
有没有办法让浮动 无论文字位置如何?
答案 0 :(得分:22)
如果您不想使用正则表达式,请使用filter_var:
$str = "CASH55.35inMyPocket";
var_dump( (float) filter_var( $str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ); // float(55.35)
答案 1 :(得分:3)
你所拥有的东西不能被渲染到浮点数,因为从PHP的角度看它看起来不像浮点数。但是可以使用正则表达式来获取值。
如果您不确定是否总会有小数。而且无论文本中的位置如何,您都试图获取数字(根据您的问题)。你可以使用:
^.*?([\d]+(?:\.[\d]+)?).*?$
从以下字符串中获取数值:
CASH55.35inMyPocket
CASH55inMyPocket
55.35inMyPocket
55inMyPocket
inMyPocket55.35
inMyPocket55
说明:http://regex101.com/r/tM8eM0
演示:http://rubular.com/r/Gw5HTzsejj
PHP演示:https://eval.in/165521
基本上它会在字符串中查找数字。并且可选地在此之后还检查小数。
答案 2 :(得分:2)
在使用floatval
或(float)
之前,您可以尝试使用一些函数为您提取该值。
类似的东西:
function myFloats($str) {
if(preg_match("#([0-9\.]+)#", $str, $match)) { // search for number that may contain '.'
return floatval($match[0]);
} else {
return floatval($str); // take some last chances with floatval
}
}
然后测试:
echo myFloats("CASH55.35inMyPocket");
答案 3 :(得分:1)
使用正则表达式:
preg_match('/([0-9]+\.[0-9]+)/', 'CASH55.35inMyPocket', $matches);
$number = (float) $matches[1]; // 55.35
答案 4 :(得分:1)
我认为preg_replace
在这里可能会有所帮助(未经测试):
$float = preg_replace('/[^0-9\.]/', "", "CASH55.35inMyPocket"); // only show the numbers and dots
你可以将preg扩展到只得到[number]。[number],但在这种情况下我认为它会起作用。
答案 5 :(得分:0)
修改@ hek2mgl答案以获取浮点数和整数
preg_match('/([0-9]+\.?[0-9].)/', 'CASH55.35inMyPocket', $matches);
$number = (float) $matches[1]; // 55.35
preg_match('/([0-9]+\.?[0-9].)/', 'CASH55inMyPocket', $matches);
$number = (float) $matches[1]; // 55
preg_match('/([0-9]+\.?[0-9].)/', 'Total.CASH55.35inMyPocket', $matches); //with a dot before number
$number = (float) $matches[1]; // 55.35
答案 6 :(得分:-1)
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}