function extractNumber($str) {
$re = '/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
return isset($matches[1]) ? floatval(trim($matches[1][0])) : 0;
}
echo extractNumber('4,158.60'); // 4
将字符串转换为float的最可靠方法是什么?另外,我不想在没有小数的情况下返回浮点数,我该怎么做?
答案 0 :(得分:0)
首先,我们需要获取当前的区域设置'千分隔符:
$locale_def = localeconv();
$thousands_separator = $locale_def["thousands_sep"];
但是,如果字符串与当前语言环境不兼容,并且我们有一个硬编码的千位分隔符:
$thousands_separator = ",";
然后我们需要替换它们:
$str = str_replace($thousands_separator, "", $str);
最后,我们可以使用floatval
:
$float = floatval($str);
(可选)如果字符串没有小数部分,我们可以将它用作整数:
$num = fmod($float,1) === 0 ? intval($float) : $float;