как преобразовать все числа в xx, xx десятичный формат без разрыва номера или строки? как;
8,9 --> 8,90 8,99 --> 8,99 12,1 --> 12,10 129,9 --> 129,90
Есть идеи?
Вы можете использовать number_format как:
$n = 2.1; echo number_format($n, 2, ','); // 2,10
Если у вас есть запятые в качестве десятичных разделителей на вашем входе, вы можете конвертировать значения в float с помощью:
$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number)));
str_replace('.', '', $string_number)
используется для удаления тысяч разделителей. str_replace(',', '.', ... )
используется для замены запятых точками.
Если у вас включено расширение intl
, наилучший подход к проблеме (IMO) приводится в принятом ответе на этот вопрос: PHP: unformat money
Вы можете использовать
NumberFormatter::parseCurrency
–NumberFormatter::parseCurrency
номера валютыПример из руководства:
$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); var_dump($formatter->parseCurrency("75,25 €", $curr));
дает:
float(75.25)
Обратите внимание, что внутреннее расширение не включено по умолчанию. См. Инструкции по установке .
После этого у вас будет значение float и форматирование, которое является тривиальной проблемой, используя number_format()
.
Если у вас нет этого расширения, ознакомьтесь с подходом регулярного выражения в этом вопросе: какой быстрый способ очистки денежной строки
$money = number_format($number, 2, ",", ","); // $number must be a float, ie 8.8
Если ваши входы должны иметь запятые в качестве разделителей с десятичной запятой, сделайте это тоже:
$money = "20,2"; $fixed_money = floatval(str_replace(",", ".", $money)); echo number_format($fixed_money, 2, ",", ",");
str_pad добавит отсутствующий нуль
$val = '1008,95'; $len = strpos($val, ',') + 3; $newval = str_pad($val, $len, '0', STR_PAD_RIGHT); echo "Value: " . $newval . "<br>";
Вы должны быть уверены, что ваши значения не имеют более двух десятичных цифр, хотя
Я создал композиторский пакет, который может заниматься такими вещами в зависимости от валюты, которую вы показываете.
https://packagist.org/packages/votemike/money
Если вы также введете страну, она будет форматировать валюту по-местному (с запятыми или без запятых и с правильным количеством знаков после запятой)
$money = new Money(99.50, 'JPY'); $money->format(); //¥100
Итак, если вы просто создаете новый денежный объект с суммой, которую хотите отобразить, и валютой, в которой вы ее показываете, вызывающий -> format () на этом объекте должен дать вам результат, который вы ищете.