У меня есть список цен с запятой для десятичной точки и точкой в виде разделителя тысяч.
Некоторые примеры:
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