将逗号作为小数点转换为浮点数

我有一个逗号为小数点和一个点作为千位分隔符的价格列表。

一些例子:

12,30
116,10
1.563,14

这些来自第三方的格式。 我想将它们转换为浮动并将它们添加在一起。

做这个的最好方式是什么? number_format似乎不适用于这种格式,而str_replace似乎是矫枉过正,因为我必须在每个数字上多做一次。

有更好的方法吗? 谢谢。

使用str_replace()删除点并不是矫枉过正。

 $string_number = '1.512.523,55'; // NOTE: You don't really have to use floatval() here, it's just to prove that it's a legitimate float value. $number = floatval(str_replace(',', '.', str_replace('.', '', $string_number))); // At this point, $number is a "natural" float. print $number;
$string_number = '1.512.523,55'; // NOTE: You don't really have to use floatval() here, it's just to prove that it's a legitimate float value. $number = floatval(str_replace(',', '.', str_replace('.', '', $string_number))); // At this point, $number is a "natural" float. print $number; 

这几乎可以肯定是你可以做到这一点的CPU密集度最低的方法,即使你使用了一些奇特的function来做到这一点,这就是它在底层所做的事情。

如果您使用PHP5.3或更高版本,则可以使用numfmt_parse执行“反向number_format”。 如果你不是,你坚持用preg_replace / str_replacereplace发生。

您可以使用NumberFormatter类及其parse方法 。

假设他们在一个文件或数组中,只是做一个批次的replace(即在所有的一次):

 $input = str_replace(array('.', ','), array('', '.'), $input); 

然后从那里处理数字,充分利用PHP的松散types本质。

这个function与点或逗号的数字是小数一致的

 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 

来自PHP手册:

str_replace – 用replacestringreplace所有出现的searchstring

我会沿着这条路线,然后从string转换为float – floatval