Формат десятичных денег

как преобразовать все числа в 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::parseCurrencyNumberFormatter::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 () на этом объекте должен дать вам результат, который вы ищете.