PHP-用逗号作为小数点转换数字
我有一个价格列表,逗号为小数点,点为千位分隔符。
一些例子:
12,30
116,10
1.563,14
这些来自第三方。 我想将它们转换为浮点数并将它们添加在一起。
做这个的最好方式是什么? number_format似乎不适用于此格式,str_replace似乎有点过头了,因为我必须对每个数字进行一次以上的操作。
有更好的办法吗? 谢谢。
7个解决方案
97 votes
使用str_replace()删除点并不过分。
几乎可以肯定,这是执行此操作所需的CPU最少的方法,而且即使您使用某些高级功能来执行此操作,也很可能是在后台执行的操作。
Teekin answered 2019-10-24T14:44:59Z
16 votes
如果您使用的是PHP5.3或更高版本,则可以使用numfmt_parse进行“反向的number_format”操作。 如果不是这样,您就不得不用preg_replace / str_replace替换出现。
Björn answered 2019-10-24T14:45:25Z
11 votes
您可以将NumberFormatter类及其parse方法一起使用。
Gumbo answered 2019-10-24T14:45:52Z
9 votes
此功能适用于点或逗号为小数的数字
function floatvalue($val){
$val = str_replace(",",".",$val);
$val = preg_replace('/\.(?=.*\.)/', '', $val);
return floatval($val);
}
$number = "1.325.125,54";
echo floatvalue($number); // The output is 1325125.54
$number = "1,325,125.54";
echo floatvalue($number); // The output is 1325125.54
Ramon answered 2019-10-24T14:46:21Z
7 votes
假设它们在文件或数组中,只需批量替换即可(即一次全部替换):
$input = str_replace(array('.', ','), array('', '.'), $input);
然后从那里处理数字,从而充分利用PHP的松散类型性质。
Paul Norman answered 2019-10-24T14:46:59Z
6 votes
可能看起来过多,但会在没有语言环境的情况下转换任何给定的格式:
function normalizeDecimal($val, int $precision = 4): string
{
$input = str_replace(' ', '', $val);
$number = str_replace(',', '.', $input);
if (strpos($number, '.')) {
$groups = explode('.', str_replace(',', '.', $number));
$lastGroup = array_pop($groups);
$number = implode('', $groups) . '.' . $lastGroup;
}
return bcadd($number, 0, $precision);
}
输出:
.12 -> 0.1200
123 -> 123.0000
123.91 -> 12345678.9100
123 456 78.91 -> 12345678.9100
123,456,78.91 -> 12345678.9100
123.456.78,91 -> 12345678.9100
123 456 78,91 -> 12345678.9100
Adrian Piechota answered 2019-10-24T14:47:31Z
2 votes
从PHP手册:
str_replace —替换所有出现的事件 搜索字符串的 替换字符串
我会沿着那条路线走,然后从字符串转换为float-floatval
Yishai Landau answered 2019-10-24T14:48:15Z