Преобразование числа с запятой в виде десятичной точки для плавания

У меня есть список цен с запятой для десятичной точки и точкой в ​​виде разделителя тысяч.

Некоторые примеры:

12,30
116,10
1.563,14

Они поступают в этом формате от третьего лица. Я хочу преобразовать их в float и добавить их вместе.

Каков наилучший способ сделать это? 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 способ, которым вы можете это сделать, и есть вероятность, что даже если вы используете какую-нибудь причудливую функцию для этого, это то, что он делает под капотом.

Если вы используете PHP5.3 или выше, вы можете использовать numfmt_parse для «обратного number_format». Если вы этого не сделаете, вы застряли с заменой записей с помощью preg_replace / str_replace.

Вы можете использовать класс NumberFormatter с его методом parse .

Предполагая, что они находятся в файле или массиве, просто замените его как пакет (то есть на всех сразу):

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

а затем обрабатывать числа оттуда, используя все преимущества слабо типизированной природы PHP.

Эта функция совместима для чисел с точками или запятыми в виде десятичных знаков

 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 – Заменить все вхождения строки поиска на строку замены

Я бы спустил этот маршрут, а затем конвертировал из строки в float – floatval