number_format — Форматирует число с разделением групп


Содержание

Форматирование чисел с помощью функции number_format PHP

Среди функций PHP есть такие, которые работают числами, с их выводом. Например, number_format. Она позволяет отформатировать числовые данные. Например, число 123 456.78 будет лучше восприниматься, чем 123456.784321.

PHP функция number_format() — это лёгкий способ форматировать числа для их последующего отображения. Можно разделять разряды, выбирая знак разделения, можно выбирать знак разделения целой и дробной части или вовсе не выводить последнюю.

Основы форматирования чисел в PHP

По умолчанию number_format() принимает число для форматирования и возвращает строку, которая содержит отформатированное число, округлённое до ближайшего целого с разделением каждой группы тысяч с помощью запятой. Рассмотрим пример.

Так как number_format() возвращает строку, которая содержит символы разделители, то использовать вывод функции number_format() в качестве числовых значений для последующих математических операций или функций нельзя. Поэтому, все вычисления надо производить в оригинальных числовых значениях, а форматировать результат с помощью number_format() только тогда, когда нужно показывать его пользователю.

Задаём количество знаков дробной части числа

Количество знаков в дробной части числа задаётся в качестве второго аргумента функции number_format(). Функция округляет число вверх или вниз до указанного количества десятичных знаков:

Использование различных символов разделителей

По умолчанию функция number_format() использует точку для отделения десятичной дробной части и запятую для разделения групп тысяч. Для того, чтобы использовать другие символы, нужно передать новый десятичный разделитель в качестве третьего аргумента в функцию, а новый разделитель тысяч — в качестве четвёртого аргумента.

Следующий пример демонстрирует форматирование чисел в соответствии с Французским стандартом — запятая используется для отделения дробной части числа, а пробел — для отделения групп тысяч.:

Если вам нужно выводить числа в соответствии с Английским стандартом, то есть с округлением до двух десятичных знаков в дробной части и без отделения групп тысяч, нужно использовать следующий вызов функции:

Вы можете использовать PHP функцию localeconv() для определения текущих установок локали компьютера для десятичной точки и разделителя тысяч — чтобы установить их в функции number_format().

Вывод

Благодаря функции number_format() возможен лёгкий способ для вывода чисел в нужном разработчику формате для последующего чтения.

Number_format — Форматирует число с разделением групп

(PHP 3, PHP 4, PHP 5)

number_format — Форматирует число с разделением групп

Описание string number_format ( float number [, int decimals] )
string number_format ( float number, int decimals, string dec_point, string thousands_sep )

number_format() возвращает отформатированное число number . Функция принимает один, два или четыре аргумента (не три):

Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между группами цифр по 3.

Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между группами цифр по 3.

Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point , а в качестве разделителя групп — thousands_sep .

Используется только первый символ строки thousands_sep . Например, при передаче foo в качестве thousands_sep для форматирования числа 1000 , number_format() возвращает 1f000 .

Пример 1. Пример использования number_format()

Во Франции обычно используются 2 знака после запятой (‘,’), и пробел (‘ ‘) в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :

// английский формат (по умолчанию)
$english_format_number = number_format ( $number );
// 1,234

// французский формат
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56

// английский формат без разделителей групп
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57

Snip Code

Форматирование числа с разделением по 3 цифры

Если в вашем интернет магазине цена товара измеряется миллионами, то воспринимать такую цифру 15200000 (пятнадцать миллионов двести тысяч) пользователю довольно сложно, куда проще понять о какой сумме идет речь, когда цифра выглядит вот так: 15 200 000

Тут нам на помощь придет функция number_format

Решение

$number = 15200000.00 ; // цифра на входе

echo number_format ( $number ) ; // выведет 15,200,000
echo number_format ( $number , 2 ) ; // выведет 15,200,000.00
echo number_format ( $number , 2 , ‘,’ , ‘ ‘ ) ; // выведет 15 200 000,00
echo number_format ( $number , 0 , ‘,’ , ‘ ‘ ) ; // выведет 15 200 000
echo number_format ( $number , 2 , ‘.’ , ‘ ‘ ) ; // выведет 15 200 000.00
?>

Демо работы функции

15,200,000
15,200,000.00
15 200 000,00
15 200 000
15 200 000.00

Рейтинг:

Если вы знаете более оригинальное, красивое, ЛУЧШЕЕ решение этой задачи, у вас есть шанс заработать 100 рублей. Если ваше решение будет признано лучшим, деньги ваши! Мы гарантируем выплату!

phpguru

Функция отличная только надо бы добавить для utf8 кодировку обработать строку, а то не все понимают как сделать подобное!
$str = iconv_strlen($str,’UTF-8′);
Я так считаю!
13-12-2013 в 12:59:38 ID# 454 посмотреть.

SnipCode.ru

Возможно Вы правы, непонятно только зачем тут iconv_strlen (((
13-12-2013 в 13:02:55 ID# 455 посмотреть.

Сергей

поторопился, так надо в конце, пардон.
return $v[‘pass’];
>
return FALSE;
>


02-12-2013 в 23:33:41 ID# 377 посмотреть.

Сергей

Думаю все же логичней использовать foreach, т.к. можно промахнуться с ключами, а если массив ассоциативный (я раньше делал ключ = дата и время регистрации), то вообще работать не будет.

function search($array,$login)
<
foreach ($array as $k=>$v)
if($v[‘login’] == $login) <
return $v[‘pass’];
>
>
return FALSE;
Так, на минутку.
Время исполнения смысла не имеет, авторизация используется 1 раз, если юзер не параноик)))

02-12-2013 в 23:33:41 ID# 376 посмотреть.

Пабло

Как сделана ваша система рейтинга,с учетом количеством людей,проголосовавших?
11-11-2013 в 17:04:39 ID# 207 посмотреть.

SnipCode.ru

ну. вобщем то все просто: берем общую оценку, делим на кол-во проголосовавших, получаем рейтинг
11-11-2013 в 17:07:06 ID# 208 посмотреть.

Пабло

Да,просто у меня возникли проблемы,при сохранении данных,в бд и отображение количество проголосовавших людей,у вас где нибудь на сайте описано как это сделано или будет?

Мне нужна система рейтинга точно такая же как у вас=)
11-11-2013 в 17:10:56 ID# 209 посмотреть.

KorniloFF

Приведенный код обрезает до первой точки в строке, в случае, если в ней будет их несколько, что не соответствует теме.
Вот код, обрезающий до последней точки:

Виктор

Все отлично работает! Извините , у меня есть задача отрезать после второй и до второй запятой , что нужно поправить в первом примере?
Спасибо!
30-09-2013 в 20:34:07 ID# 204 посмотреть.

44 человека и 53 робота за 24ч
Online: 6 посетителей (15 мин.)
Добро пожаловать!

Стандартное форматирование чисел

Преобразования типов

Значения типов по умолчанию

Типы чисел с плавающей запятой

Типы целых чисел

В таблице представлены описание, размеры и диапазоны целых типов, которые составляют подмножество простых типов.

Тип Диапазон Размер
sbyte -128 … 127 8-разрядное целое число со знаком
byte 0 … 255 8-разрядное целое число без знака
char U+0000 … U+ffff 16-разрядный символ Юникода
short -32 768 … 32 767 16-разрядное целое число со знаком
ushort 0 … 65 535 16-разрядное целое число без знака
int -2 147 483 648 … 2 147 483 647 32-разрядное целое число со знаком
uint 0 … 4 294 967 295 32-разрядное целое число без знака
long -9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 64-разрядное целое число со знаком
ulong 0 … 18 446 744 073 709 551 615 64-разрядное целое число без знака
decimal -7,9*10 28 … 7,9*10 28 Для финансовых расчетов 128-разрядное целое число со знаком

В таблице представлены приблизительные диапазоны типов с плавающей запятой.

Тип Диапазон Точность отображения
float ±1,5e−45 … ±3,4e38 7-8 знаков
double ±5,0e−324 … ±1,7e308 15 -16 знаков

В таблице приведены значения типов, возвращаемые по умолчанию.

В C# не допускается использование неинициализированных переменных. Что означает, что при объявлении переменных необходимо задать им первоначальные (стартовые) значения, которые в программе могут быть переопределены на другие.

Тип Значение по умолчанию Тип Значение по умолчанию
bool false char ‘0’ – код с номером 0
byte sbyte
int uint
short ushort
double 0,0D float 0,0F
long 0L ulong

Все вычисления происходят с использованием типа double. Другие типы чисел могут применяться для уменьшения занимаемой памяти. При их использовании перед вычислением они преобразуются в тип double. Различают преобразования:

§ Неявные преобразования используются для совместимых типов. Значения источника полностью отображаются приемником, т.к. тип приемника больше, чем тип источника. Например, преобразование int в double (int – подмножество double) выполняется автоматически, его не надо заказывать.

§ Явные преобразования используются для несовместимых типов. Например, при преобразовании double в int (int – подмножество double) значения источника не полностью отображаются приемником.

Если типы несовместимы, и ошибка допустима, то преобразование возможно, но его нужно при объявлении явно заказать: перед преобразуемым выражением в круглых скобках добавляется префикс идентификации конечного типа.

Все числа выводятся в консоль в виде строк символов. Потому перед выводом применяется форматирование результата.

Все числовые типы поддерживают определенный набор описателей формата. Для чисел поддерживаются национальные стандарты. Например, для России разделитель целой и дробной части числа — запятая.

Метод вывода в консоль содержит в двойных кавычках строку вывода, в состав которой входят выводимые символы и описатели форматов вывода не строковых данных, вставляемые в строку в нужных местах. После строки через запятые перечисляются имена выводимых данных. Количество описателей формата и не строковых данных одинаково, нумерация данных начинается с нуля.

Описатель формата помещается в фигурные скобки и имеет структуру:

Пример 1.Если указывается только номер вывода, то выводимые не строковые данные форматируются по умолчанию. Строка кода:

Console.WriteLine(«p=<0>«,p); даст результат ® p=2,8322092165912

Пример 2. Выводятся значения x, y (номера вывода 0 и 1), формат по умолчанию.

Console.WriteLine(«x = <0>y = <1>«, x, y); ® x=-2,1548 y=15,125

Пример 3. Выводится значение x (номер вывода 0), под число отводится 8 позиций, используется денежный формат (буква C).

Пример 4. Выводится значение y (номер вывода 0), используется общий формат (буква G – реально полученное при вычислении количество символов).

Console.WriteLine(«y = <0:g>«, y); ® y=65,1253


Пример 5. Выводится значение z (номер вывода 0), используется экспоненциальный (научный) формат (буква E – 6 символов после запятой).

Пример 6. Выводятся значения x, y (номера вывода 0 и 1), под числа отводится 5 позиций, используется фиксированный формат (буква F – 2 символа после запятой).

Пример 7. Выводится значение s (номер вывода 0) по шаблону. В отображении числа отводится 1 позиция для целой и 3 позиции для дробной части числа.

Имеется набор стандартных форматов. Синтаксис записи формата:

Описатель формата — это алфавитный символ, определяющий строковое представление объекта, к которому он применяется. Также строка формата может содержать необязательный описатель точности d, определяющий, сколько цифр отображается в результирующей строке. Если спецификаторы пропускаются, то используются их значения по умолчанию. Предусмотрены следующие форматы:

Буква (загл/стр) Формат Примеры d по умолч.
G g Общий -123.456 -> -123.456 Факт
F f Фиксированная запятая 1234.569 -> 1234.57
N n Число 1234.569 -> 1,234.57 Запятая разделяет группы
E e Экспоненциальный (научный) 1052.0329112756 -> 1.052033E+003
D d Десятичный -1234 («D6») -> -001234 Мин.
C c Валюта 123.458 -> $123.46 Используются символы валют
P p Проценты 1 -> 100.00 %

§ Формат G – общий. Поддерживается всеми числовыми типами данных. Но результат наиболее компактен при использовании экспоненциального формата или формат с фиксированной запятой. Описатель точности — количество значащих цифр.

§ Формат F — фиксированная запятая. Результат — цифры целой и дробной частей с необязательным отрицательным знаком. Поддерживается всеми числовыми типами данных. Описатель точности — количество цифр дробной части (по умолчанию 2).

§ Формат N – число. Результат — цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком. Поддерживается всеми числовыми типами данных. Описатель точности — желаемое число знаков дробной части.

§ Формат E – экспоненциальный (научный). Результат – экспоненциальное отображение. Поддерживается всеми числовыми типами данных. Описатель точности — количество цифр дробной части. Описатель точности по умолчанию 6.

§ Формат D – десятичный. Результат — целочисленные цифры с необязательным отрицательным знаком. Поддерживается только целочисленными типами данных. Описатель точности — минимальное число цифр. Описатель точности по умолчанию — минимальное необходимое число цифр.

Илон Маск рекомендует:  Функции forms data format

§ Формат C – валюта. Результат – значение валюты. Если есть символ, то он выводится. Поддерживается всеми числовыми типами данных. Описатель точности — количество цифр дробной части.

§ Формат P – проценты. Результат – число, умноженное на 100 и отображаемое с символом процента. Поддерживается всеми числовыми типами данных. Описатель точности — желаемое число знаков дробной части.

6.8. Символы char

Тип Char – это один символ в коде unicod. Символ помещается в одиночные кавычки. Синтаксис объявления:

Доступные числовые форматы в Excel

В этом курсе:

В Excel числа, содержащиеся в ячейках, можно преобразовать, например, в денежные единицы, проценты, десятичные числа, даты, номера телефонов или номера социального страхования США.

Выделите ячейку или диапазон ячеек.

На вкладке Главная выберите в раскрывающемся списке формат Числовой.

Вы также можете выбрать один из следующих вариантов:

Нажмите клавиши CTRL + 1 и выберите число.

Щелкните ячейку или диапазон ячеек правой кнопкой мыши, выберите команду Формат ячеек. и формат Числовой.

Нажмите кнопку вызова диалогового окна рядом с надписью число а затем выберите число.

Выберите нужный формат.

Числовые форматы

Чтобы просмотреть все доступные числовые форматы, на вкладке Главная в группе Число нажмите кнопку вызова диалогового окна рядом с надписью Число.

При вводе чисел в Excel этот формат используется по умолчанию. В большинстве случаев числа, имеющие формат Общий, отображаются так, как вводятся. Однако если ширины ячейки недостаточно для отображения всего числа, числа в формате Общий округляются. Для чисел, содержащих более 12 знаков, в формате Общий используется научное (экспоненциальное) представление.

Используется как основной для вывода чисел. Можно задать количество отображаемых знаков после запятой, применение разделителя групп разрядов и способ отображения отрицательных чисел.

Используется для денежных значений и выводит рядом с числом обозначение денежной единицы по умолчанию. Можно задать количество отображаемых знаков после запятой, применение разделителя групп разрядов и способ отображения отрицательных чисел.

Используется для отображения денежных значений с выравниванием обозначений денежных единиц и десятичных разделителей в столбце.

Отображает числовые представления даты и времени как значения даты в соответствии с заданным типом и языковым стандартом (местоположением). Форматы даты, начинающиеся со звездочки ( *), соответствуют формату отображения даты и времени, заданному на панели управления. На форматы без звездочки параметры, заданные на панели управления, не влияют.

Отображает числовые представления даты и времени как значения времени в соответствии с заданным типом и языковым стандартом (местоположением). Форматы времени, начинающиеся со звездочки ( *), соответствуют формату отображения даты и времени, заданному на панели управления. На форматы без звездочки параметры, заданные на панели управления, не влияют.

В этом формате значение ячейки умножается на 100, а результат отображается со знаком процента ( %). Можно задать количество знаков в дробной части.

Отображает число в виде дроби выбранного типа.

Отображает число в экспоненциальном представлении, заменяя часть числа на E+n, где E обозначает экспоненциальное представление, то есть умножение предшествующего числа на 10 в степени n. Например, экспоненциальный формат с двумя знаками в дробной части отображает 12345678901 как 1,23E+10, то есть 1,23, умноженное на 10 в 10-й степени. Можно задать количество знаков в дробной части.

Содержимое ячейки (включая числа) обрабатывается как текст и отображается именно так, как было введено.

Число отображается в виде почтового индекса, телефонного номера или страхового номера (SSN).

Позволяет изменять копию существующего кода числового формата. При этом создается пользовательский числовой формат, добавляемый в список кодов числовых форматов. В зависимости от языковой версии Microsoft Excel можно ввести от 200 до 250 пользовательских числовых форматов. Дополнительные сведения см. в статье Создание и удаление пользовательских числовых форматов.

Вы можете применить различные форматы к числам, чтобы изменить способ их отображения. Только форматы изменяют способ отображения чисел и не влияют на значения. Например, если вы хотите, чтобы число отображалось в денежных единицах, щелкните ячейку с числовым значением > денежный.

Применение числового формата только в том случае, если номер отображается и не влияет на значения ячеек, которые используются для выполнения вычислений. Фактическое значение можно просмотреть в строка формул.

Ниже перечислены доступные форматы номеров и способы их использования в Excel в Интернете.

Числовой формат по умолчанию. Если ячейка не слишком широкая, чтобы показать целое число, этот формат Округляет число. Например, 25,76 отображается как 26.

Кроме того, если число состоит из 12 или более цифр, в поле Общий формат отображается значение в экспоненциальном представлении.

Работает очень похоже на Общий формат, но изменяет способ отображения чисел с разделителями десятичных разрядов и отрицательными числами. Ниже приведено несколько примеров отображения чисел в обоих форматах.


Денежный символ с цифрами. Число десятичных разрядов можно указать с помощью параметра Увеличить разрядность или Уменьшить разрядность.

Также используется для денежных значений, но выравнивает символы денежных единиц и десятичные разделители чисел в столбце.

Краткий формат даты

Отображает дату в следующем формате:

Длинный формат даты

Показывает месяц, день и год в следующем формате:

Отображает число серийных номеров даты и времени как значения времени.

В этом формате значение ячейки умножается на 100, а результат отображается со знаком процента ( %).

Используйте параметр Увеличить разрядность или Уменьшить разрядность , чтобы указать нужное число десятичных знаков.

Число отображается в виде дроби. Например, 0,5 отображается как 1/2.

Выводит числа в экспоненциальном представлении, заменяя часть числа на E + n, где E (экспонента) умножает предшествующее число на 10 для n-го электричества. Например, экспоненциальный формат с двумя знаками в дробной части отображает 12345678901 как 1,23E+10, то есть 1,23, умноженное на 10 в 10-й степени. Чтобы указать нужное количество десятичных разрядов, примените к нему больше десятичных знаков или Уменьшите число десятичныхразрядов.

Значение ячейки интерпретируется как текст и отображается точно так же, как при вводе чисел. Дополнительные сведения о форматировании чисел в текстовом формате.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

См. также

Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).

number_format

(PHP 4, PHP 5, PHP 7)

number_format — Форматирует число с разделением групп

Описание

Функция принимает один, два или четыре аргумента (не три):

Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между каждыми тремя цифрами.

Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между каждыми тремя цифрами.

Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделителем между между каждыми тремя цифрами, при этом в качестве десятичной точки будет использован dec_point , а в качестве разделителя групп — thousands_sep .

Список параметров

Устанавливает число знаков после запятой.

Устанавливает разделитель дробной части.

Устанавливает разделитель тысяч.

Возвращаемые значения

Возвращается отформатированное число number .

Список изменений

Версия Описание
5.4.0 Функция поддерживает многобайтную строку в качестве параметров dec_point и thousands_sep . В предыдущих версиях в качестве разделителя использовался только первый байт из каждого параметра.

Примеры

Пример #1 Пример использования number_format()

Во Франции обычно используются 2 знака после запятой (‘,’), и пробел (‘ ‘) в качестве разделителя групп. Такое форматирование получается при использовании следующего кода:

// английский формат (по умолчанию)
$english_format_number = number_format ( $number );
// 1,235

// французский формат
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56

// английский формат без разделителей групп
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57

Смотрите также

  • money_format() — Форматирует число как денежную величину
  • sprintf() — Возвращает отформатированную строку
  • printf() — Выводит отформатированную строку
  • sscanf() — Разбирает строку в соответствии с заданным форматом

Коментарии

formatting numbers may be more easy if u use number_format function.

I also wrote this :
function something($number)
<
$locale = localeconv();
return number_format($number,
$locale[‘frac_digits’],
$locale[‘decimal_point’],
$locale[‘thousands_sep’]);
>

hope this helps =)
[]’s

Just an observation:
The number_format rounds the value of the variable.


$val1 = 1.233;
$val2 = 1.235;
$val3 = 1.237;

echo number_format($val1,2,»,»,».»); // returns: 1,23
echo number_format($val2,2,»,»,».»); // returns: 1,24
echo number_format($val3,2,»,»,».»); // returns: 1,24

People here in India are more used to counting money in Lakhs & Crores .. so here is the code for formatting the commas with thousands for the first time and then with hundred multiples from there after.

Ex: 1234567 -> 12,34,567

function makecomma ( $input )
<
// This function is written by some anonymous person — I got it from Google
if( strlen ( $input ) 2 )
< return $input ; >
$length = substr ( $input , 0 , strlen ( $input )- 2 );
$formatted_input = makecomma ( $length ). «,» . substr ( $input ,- 2 );
return $formatted_input ;
>

function formatInIndianStyle ( $num ) <
// This is my function
$pos = strpos ((string) $num , «.» );
if ( $pos === false ) < $decimalpart = "00" ;>
else

if( strlen ( $num )> 3 & strlen ( $num ) 12 ) <
$last3digits = substr ( $num , — 3 );
$numexceptlastdigits = substr ( $num , 0 , — 3 );
$formatted = makecomma ( $numexceptlastdigits );
$stringtoreturn = $formatted . «,» . $last3digits . «.» . $decimalpart ;
>elseif( strlen ( $num ) 3 ) <
$stringtoreturn = $num . «.» . $decimalpart ;
>elseif( strlen ( $num )> 12 ) <
$stringtoreturn = number_format ( $num , 2 );
>

if( substr ( $stringtoreturn , 0 , 2 )== «-,» )

$num = 1234567 ;
echo formatInIndianStyle ( $num );

If you use space as a separator, it will break on that space in HTML tables.

Furthermore, number_format doesn’t like ‘ ‘ as a fourth parameter. I wrote the following function to display the numbers in an HTML table.

function numberfix($number)
<
$number = number_format($number,0,»,»,» «);
return str_replace(» «, » «, $number);
>

For use in:

echo $number ; ?>

if you want as a separator and use windows charset this piece of code may help:

= number_format ( $number , 2 , ‘.’ , chr ( 0xA0 ));
?>

I ran across an issue where I wanted to keep the entered precision of a real value, without arbitrarily rounding off what the user had submitted.

I figured it out with a quick explode on the number before formatting. I could then format either side of the decimal.

function number_format_unlimited_precision ( $number , $decimal = ‘.’ )
<
$broken_number = explode ( $decimal , $number );
return number_format ( $broken_number [ 0 ]). $decimal . $broken_number [ 1 ];
>
?>

What do you do if some of your numbers have decimal places, and some don’t? You can switch between functions, but if you’re building it in a loop, that’s not a good solution. Instead, we have the same as below, with a slight change:

function number_format_unlimited_precision($number,$decimal = ‘.’) <
$broken_number = explode($decimal,$number);
if($broken_number[1]==0) <
return number_format($broken_number[0]);
>else <
return number_format($broken_number[0]).$decimal.$broken_number[1];
>;
>;

See also the documentation for localeconv, which will provide values for decimal point and thousands separator from the C standard library.

Of course localeconv features many more locale information, like indicating to put the negative sign behind the value for some locale settings which can’t be used to customize present number_format.

If you want to display a number ending with ,- (like 200,-) when there are no decimal characters and display the decimals when there are decimal characters i use:

function DisplayDouble($value)
<
list($whole, $decimals) = split (‘[.,]’, $value, 2);
if (intval($decimals) > 0)
return number_format($value,2,».»,»,»);
else
return number_format($value,0,».»,»,») .»,-«;
>

For Zero fill — just use the sprintf() function

$pr_ > $pr_ , $pr_id);
echo $pr_id;

$pr_ > $pr_ , $pr_id);
echo $pr_id;

You can change %03d to %04d, etc.

# Function to represent a number like ‘2nd’, ’10th’, ‘101st’ etc
function text_number ( $n )
<
# Array holding the teen numbers. If the last 2 numbers of $n are in this array, then we’ll add ‘th’ to the end of $n
$teen_array = array( 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 );

# Array holding all the single digit numbers. If the last number of $n, or if $n itself, is a key in this array, then we’ll add that key’s value to the end of $n
$single_array = array( 1 => ‘st’ , 2 => ‘nd’ , 3 => ‘rd’ , 4 => ‘th’ , 5 => ‘th’ , 6 => ‘th’ , 7 => ‘th’ , 8 => ‘th’ , 9 => ‘th’ , 0 => ‘th’ );

# Store the last 2 digits of $n in order to check if it’s a teen number.
$if_teen = substr ( $n , — 2 , 2 );

# Store the last digit of $n in order to check if it’s a teen number. If $n is a single digit, $single will simply equal $n.
$single = substr ( $n , — 1 , 1 );

# If $if_teen is in array $teen_array, store $n with ‘th’ concantenated onto the end of it into $new_n
if ( in_array ( $if_teen , $teen_array ) )
<
$new_n = $n . ‘th’ ;
>
# $n is not a teen, so concant the appropriate value of it’s $single_array key onto the end of $n and save it into $new_n
elseif ( $single_array [ $single ] )
<
$new_n = $n . $single_array [ $single ];
>

This is a simple and useful function to convert a byte number in a KB or MB:

function filesize_format ( $bytes ) <
$bytes =(float) $bytes ;
if ( $bytes 1024 ) <
$numero = number_format ( $bytes , 0 , ‘,’ , ‘.’ ). » Byte» ;
return $numero ;
>
if ( $bytes 1048576 ) <
$numero = number_format ( $bytes / 1024 , 2 , ‘,’ , ‘.’ ). » KByte» ;
return $numero ;
>
if ( $bytes >= 1048576 ) <
$numero = number_format ( $bytes / 1048576 , 2 , ‘,’ , ‘.’ ). » MByte» ;
return $numero ;
>
>
?>

simpler function to convert a number in bytes, kilobytes.

function bytes ( $a ) <
$unim = array( «B» , «KB» , «MB» , «GB» , «TB» , «PB» );
$c = 0 ;
while ( $a >= 1024 ) <
$c ++;
$a = $a / 1024 ;
>
return number_format ( $a ,( $c ? 2 : 0 ), «,» , «.» ). » » . $unim [ $c ];
>

?>

you may also add others units over PeraBytes when the hard disks will reach 1024 PB :)

A simple funtion to format american dollars.

function formatMoney ( $money ) <
if( $money 1 ) <
$money = ‘¢’ . $money * 100 ;
>
else <
$dollars = intval ( $money );
$cents = $money — $dollars ;
$cents = $cents * 100 ;
$money = ‘$’ . $dollars . ‘ and ¢’ . $cents ;
>
return $money ;
>
echo formatmoney ( ‘52.342’ );
?>
This will output: » $52 and ¢34.2 «.

Using the number_format I’m having some unexpected results. 30% of 14.95 (14.95 * .3) = 4.485. Now 4.485 rounded to two decimal places should give me 4.49.

Example:
echo number_format ( 14.95 * .3 , 2 , ‘.’ , » ) . «\n» ;
echo number_format ( 4.485 , 2 , ‘.’ , » ) . «\n» ;
?>

Unexpected Results:
4.48
4.49

here is the code to convert number to Indonesian text, this code has limitation as is number_format function. sorry for this.
/*
* Created : Iwan Sapoetra — Jun 13, 2008
* Project : Web
* Package : cgaf
*
*/
function terbilang( $num ,$dec=4) <
$stext = array(
«Nol»,
«Satu»,
«Dua»,
«Tiga»,
«Empat»,
«Lima»,
«Enam»,
«Tujuh»,
«Delapan»,
«Sembilan»,
«Sepuluh»,
«Sebelas»
);
$say = array(
«Ribu»,
«Juta»,
«Milyar»,
«Triliun»,
«Biliun», // remember limitation of float
«—apaan—» ///setelah biliun namanya apa?
);
$w = «»;

if ($num $v) <
if (intval($v)) <
$w.= ‘ ‘.terbilang($v).’ ‘.($i >=0 ? $say[$i] : «»);
>
$i—;
>
>
$w = trim($w);
if ($dec = intval($koma)) <
$w .= » Koma «. terbilang($koma);
>
return trim($w);
>
//example
echo terbilang(999999999999).»\n»;
/**
* result : Sembilan Ratus Sembilan Puluh Sembilan Milyar Sembilan Ratus Sembilan Puluh Sembilan Juta Sembilan Ratus Sembilan Puluh Sembilan Ribu Sembilan Ratus Sembilan Puluh Sembilan
*/
echo terbilang(9999999999999999);
/**
* todo : fix this bug pleasese
* problem : number_format(9999999999999999)

= 1234567.896 ;
echo ‘1: ‘ . number_format ( $number , 2 , ‘,’ , » ). ‘
‘ ;
echo ‘2: ‘ . number_format ( $number , 2 , ‘.’ , » ). ‘
‘ ;
echo ‘3: ‘ . number_format ( $number , 2 , ‘,’ , ‘.’ ). ‘
‘ ;
echo ‘4: ‘ . number_format ( $number , 2 , ‘.’ , ‘,’ ). ‘
‘ ;
echo ‘5: ‘ . number_format ( $number , 2 , ‘,’ , ‘ ‘ ). ‘
‘ ;
echo ‘6: ‘ . number_format ( $number , 2 , ‘,’ , «‘» ). ‘
‘ ;
echo ‘7: ‘ . number_format ( $number , 2 , » , » ). ‘
‘ ;
?>

Resultado: Result:

1: 1234567,90 -> Decimal separado por ,
2: 1234567.90 -> Decimal separado por .
3: 1.234.567,90 -> Moeda Brasil, Alemanha
4: 1,234,567.90 -> Inglês, USA
5: 1 234 567,90 -> França
6: 1’234’567,90 -> Suíça
7: 123456790 -> Sem decimal


Simple function to show money as only dollars if no cents, but will show 2 decimals if cents exist.

The ‘cents’ flag can force to never or always show 2 decimals

// formats money to a whole number or with 2 decimals; includes a dollar sign in front
function formatMoney ( $number , $cents = 1 ) < // cents: 0=never, 1=if needed, 2=always
if ( is_numeric ( $number )) < // a number
if (! $number ) < // zero
$money = ( $cents == 2 ? ‘0.00’ : ‘0’ ); // output zero
> else < // value
if ( floor ( $number ) == $number ) < // whole number
$money = number_format ( $number , ( $cents == 2 ? 2 : 0 )); // format
> else < // cents
$money = number_format ( round ( $number , 2 ), ( $cents == 0 ? 0 : 2 )); // format
> // integer or decimal
> // value
return ‘$’ . $money ;
> // numeric
> // formatMoney

$a = array( 1 , 1234 , 1.5 , 1.234 , 2.345 , 2.001 , 2.100 , ‘1.000’ , ‘1.2345’ , ‘12345’ , 0 , ‘0.00’ );

// show cents if needed ($cents=1)
foreach ( $a as $b ) echo ( ‘
‘ . $b . ‘ = ‘ . formatMoney ( $b , 1 ));
1 = $ 1
1234 = $ 1 , 234
1.5 = $ 1.50
1.234 = $ 1.23
2.345 = $ 2.35
2.001 = $ 2.00
2.1 = $ 2.10
1.000 = $ 1
1.2345 = $ 1.23
12345 = $ 12 , 345
0 = $ 0
0.00 = $ 0

// never show cents ($cents=0)
foreach ( $a as $b ) echo ( ‘
‘ . $b . ‘ = ‘ . formatMoney ( $b , 0 ));
1 = $ 1
1234 = $ 1 , 234
1.5 = $ 2
1.234 = $ 1
2.345 = $ 2
2.001 = $ 2
2.1 = $ 2
1.000 = $ 1
1.2345 = $ 1
12345 = $ 12 , 345
0 = $ 0
0.00 = $ 0

// always show cents ($cents=2)
foreach ( $a as $b ) echo ( ‘
‘ . $b . ‘ = ‘ . formatMoney ( $b , 2 ));
1 = $ 1.00
1234 = $ 1 , 234.00
1.5 = $ 1.50
1.234 = $ 1.23
2.345 = $ 2.35
2.001 = $ 2.00
2.1 = $ 2.10
1.000 = $ 1.00
1.2345 = $ 1.23
12345 = $ 12 , 345.00
0 = $ 0.00
0.00 = $ 0.00

And remember to always contribute custom functions if they might be useful to the rest of us or future versions of the php language.

It’s not explicitly documented; number_format also rounds:

= array( 0.001 , 0.002 , 0.003 , 0.004 , 0.005 , 0.006 , 0.007 , 0.008 , 0.009 );
foreach ( $numbers as $number )
print $number . «->» . number_format ( $number , 2 , ‘.’ , ‘,’ ). «
» ;
?>

0.001->0.00
0.002->0.00
0.003->0.00
0.004->0.00
0.005->0.01
0.006->0.01
0.007->0.01
0.008->0.01
0.009->0.01

I was looking for a SIMPLE way to format currency and account for negative values while not losing the calculation properties of my number. Here’s my function — it’s not rocket science, but maybe can help someone along the way.

function wims_currency ( $number ) <
if ( $number 0 ) <
$print_number = «($ » . str_replace ( ‘-‘ , » , number_format ( $number , 2 , «.» , «,» )) . «)» ;
> else <
$print_number = «$ » . number_format ( $number , 2 , «.» , «,» ) ;
>
return $print_number ;
>
?>
Sample use:

= ( $pur_po_total + $pur_item_total );
$print_pur_po_total = wims_currency ( $pur_po_total );
?>

Returns (for example) $ 44,561.00 or, if a negative ($ 407,250.00)

This way, I use my 1st variable for calculations and my 2nd variable for output. I’m sure there are better ways to do it, but this got me back on track.

I’m not sure if this is the right place anyway, but «ben at last dot fm»‘s ordinal function can be simplified further by removing the redundant «floor» (the result of floor is still a float, it’s the «%» that’s converting to int) and outer switch.

Note that this version also returns the number with the suffix on the end, not just the suffix.

function ordinal ( $num )
<
// Special case «teenth»
if ( ( $num / 10 ) % 10 != 1 )
<
// Handle 1st, 2nd, 3rd
switch( $num % 10 )
<
case 1 : return $num . ‘st’ ;
case 2 : return $num . ‘nd’ ;
case 3 : return $num . ‘rd’ ;
>
>
// Everything else is «nth»
return $num . ‘th’ ;
>
?>

Outputs a human readable number.

# Output easy-to-read numbers
# by james at bandit.co.nz
function bd_nice_number ( $n ) <
// first strip any formatting;
$n = ( 0 + str_replace ( «,» , «» , $n ));

// is this a number?
if(! is_numeric ( $n )) return false ;

// now filter it;
if( $n > 1000000000000 ) return round (( $n / 1000000000000 ), 1 ). ‘ trillion’ ;
else if( $n > 1000000000 ) return round (( $n / 1000000000 ), 1 ). ‘ billion’ ;
else if( $n > 1000000 ) return round (( $n / 1000000 ), 1 ). ‘ million’ ;
else if( $n > 1000 ) return round (( $n / 1000 ), 1 ). ‘ thousand’ ;

return number_format ( $n );
>
?>

Outputs:

247,704,360 -> 247.7 million
866,965,260,000 -> 867 billion

In my function my_number_format() [shown below] there was a bug.

If a negative number which is smaller than 1 was entered (-0. ), then the result was wrongly positive because +0 is equal to -0 (the content of $tmp[0] which was interpretet as numeric value).

Here is the corrected version:

function my_number_format ( $number , $dec_point , $thousands_sep )
<
$was_neg = $number 0 ; // Because +0 == -0
$number = abs ( $number );

$tmp = explode ( ‘.’ , $number );
$out = number_format ( $tmp [ 0 ], 0 , $dec_point , $thousands_sep );
if (isset( $tmp [ 1 ])) $out .= $dec_point . $tmp [ 1 ];

if ( $was_neg ) $out = «-$out» ;

?>

Thanks to Federico Cassinelli for the bug report.

[EDIT BY danbrown AT php DOT net: The original note follows.]

Let’s say we got the number $inp = 1234.56

return number_format ( $inp , 2 , ‘,’ , ‘.’ );
?>

you can get the German format 1.234,56. (Comma as decimal separator and point as thousand separator)

But I have a problem with that: I want to add commas as thousand separators and change the decimal-separator (this could also be done with str_replace), but I do not want to change the amount of fractional digits!

But since the 2nd argument of number_format is necessary to enter the 3rd and 4th argument, this cannot be done with number_format. You have to change the fractional digits with this function.

But I want that 1234.56 changes into 1.234,56 and 1234.567890123456 changes into 1.234,567890123456

So, I created following function, that doesn’t change the amount of fractional digits:

function my_number_format ( $number , $dec_point , $thousands_sep )
<
$tmp = explode ( ‘.’ , $number );
$out = number_format ( $tmp [ 0 ], 0 , $dec_point , $thousands_sep );
if (isset( $tmp [ 1 ])) $out .= $dec_point . $tmp [ 1 ];

function to convert numbers to words
indian: thousand,lakh,crore
Note: function can only convert nos upto 99 crores

= array( ‘0’ => » , ‘1’ => ‘one’ , ‘2’ => ‘two’ , ‘3’ => ‘three’ , ‘4’ => ‘four’ , ‘5’ => ‘five’ , ‘6’ => ‘six’ , ‘7’ => ‘seven’ , ‘8’ => ‘eight’ , ‘9’ => ‘nine’ , ’10’ => ‘ten’ , ’11’ => ‘eleven’ , ’12’ => ‘twelve’ , ’13’ => ‘thirteen’ , ’14’ => ‘fouteen’ , ’15’ => ‘fifteen’ , ’16’ => ‘sixteen’ , ’17’ => ‘seventeen’ , ’18’ => ‘eighteen’ , ’19’ => ‘nineteen’ , ’20’ => ‘twenty’ , ’30’ => ‘thirty’ , ’40’ => ‘fourty’ , ’50’ => ‘fifty’ , ’60’ => ‘sixty’ , ’70’ => ‘seventy’ , ’80’ => ‘eighty’ , ’90’ => ‘ninty’ , ‘100’ => ‘hundred &’ , ‘1000’ => ‘thousand’ , ‘100000’ => ‘lakh’ , ‘10000000’ => ‘crore’ );
function no_to_words ( $no )
< global $words ;
if( $no == 0 )
return ‘ ‘ ;
else < $novalue = '' ; $highno = $no ; $remainno = 0 ; $value = 100 ; $value1 = 1000 ;
while( $no >= 100 ) <
if(( $value $no ) &&( $no $value1 )) <
$novalue = $words [ «$value» ];
$highno = (int)( $no / $value );
$remainno = $no % $value ;
break;
>
$value = $value1 ;
$value1 = $value * 100 ;
>
if( array_key_exists ( «$highno» , $words ))
return $words [ «$highno» ]. » » . $novalue . » » . no_to_words ( $remainno );
else <
$unit = $highno % 10 ;
$ten =(int)( $highno / 10 )* 10 ;
return $words [ «$ten» ]. » » . $words [ «$unit» ]. » » . $novalue . » » . no_to_words ( $remainno );
>
>
>
echo no_to_words ( 999978987 );

function formats numbers of datetime type,

[ «zaman» ]= «1983-8-28 5:5:5» ;

function _parseDatetimeToList ( $datetimeStr ) < //datetime format: Y-m-d H-i-s
$datetimeArray = explode ( » » , $datetimeStr );
$dateArray = explode ( «-» , $datetimeArray [ 0 ]);
$year = str_pad ( $dateArray [ 0 ], 2 , «0» , STR_PAD_LEFT );
$month = str_pad ( $dateArray [ 1 ], 2 , «0» , STR_PAD_LEFT );
$day = str_pad ( $dateArray [ 2 ], 2 , «0» , STR_PAD_LEFT );
$timeArray = explode ( «:» , $datetimeArray [ 1 ]);
$hour = str_pad ( $timeArray [ 0 ], 2 , «0» , STR_PAD_LEFT );
$minute = str_pad ( $timeArray [ 1 ], 2 , «0» , STR_PAD_LEFT );
$second = str_pad ( $timeArray [ 2 ], 2 , «0» , STR_PAD_LEFT );
return array( $year , $month , $day , $hour , $minute , $second );
>

list( $year , $month , $day , $hour , $minute , $second ) = _parseDatetimeToList ( $_GET [ «zaman» ]); // 1983-1-28 5:5:5
?>

To prevent the rounding that occurs when next digit after last significant decimal is 5 (mentioned by several people below):


function fnumber_format ( $number , $decimals = » , $sep1 = » , $sep2 = » ) <

if (( $number * pow ( 10 , $decimals + 1 ) % 10 ) == 5 ) //if next not significant digit is 5
$number -= pow ( 10 , -( $decimals + 1 ));

return number_format ( $number , $decimals , $sep1 , $sep2 );

$t = 7.15 ;
echo $t . » | » . number_format ( $t , 1 , ‘.’ , ‘,’ ) . » | » . fnumber_format ( $t , 1 , ‘.’ , ‘,’ ) . «\n\n» ;
//result is: 7.15 | 7.2 | 7.1

$t = 7.3215 ;
echo $t . » | » . number_format ( $t , 3 , ‘.’ , ‘,’ ) . » | » . fnumber_format ( $t , 3 , ‘.’ , ‘,’ ) . «\n\n» ;
//result is: 7.3215 | 7.322 | 7.321
> ?>

have fun!

function convertNumberToWordsForIndia ( $number ) <
//A function to convert numbers into Indian readable words with Cores, Lakhs and Thousands.
$words = array(
‘0’ => » , ‘1’ => ‘one’ , ‘2’ => ‘two’ , ‘3’ => ‘three’ , ‘4’ => ‘four’ , ‘5’ => ‘five’ ,
‘6’ => ‘six’ , ‘7’ => ‘seven’ , ‘8’ => ‘eight’ , ‘9’ => ‘nine’ , ’10’ => ‘ten’ ,
’11’ => ‘eleven’ , ’12’ => ‘twelve’ , ’13’ => ‘thirteen’ , ’14’ => ‘fouteen’ , ’15’ => ‘fifteen’ ,
’16’ => ‘sixteen’ , ’17’ => ‘seventeen’ , ’18’ => ‘eighteen’ , ’19’ => ‘nineteen’ , ’20’ => ‘twenty’ ,
’30’ => ‘thirty’ , ’40’ => ‘fourty’ , ’50’ => ‘fifty’ , ’60’ => ‘sixty’ , ’70’ => ‘seventy’ ,
’80’ => ‘eighty’ , ’90’ => ‘ninty’ );

//First find the length of the number
$number_length = strlen ( $number );
//Initialize an empty array
$number_array = array( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
$received_number_array = array();

//Store all received numbers into an array
for( $i = 0 ; $i $number_length ; $i ++)

//Populate the empty array with the numbers received — most critical operation
for( $i = 9 — $number_length , $j = 0 ; $i 9 ; $i ++, $j ++)< $number_array [ $i ] = $received_number_array [ $j ]; >
$number_to_words_string = «» ;
//Finding out whether it is teen ? and then multiplying by 10, example 17 is seventeen, so if 1 is preceeded with 7 multiply 1 by 10 and add 7 to it.
for( $i = 0 , $j = 1 ; $i 9 ; $i ++, $j ++) <
if( $i == 0 || $i == 2 || $i == 4 || $i == 7 ) <
if( $number_array [ $i ]== «1» ) <
$number_array [ $j ] = 10 + $number_array [ $j ];
$number_array [ $i ] = 0 ;
>
>
>

echo convertNumberToWordsForIndia ( «987654321» );

//Output ==> Indian Rupees Ninty Eight Crores Seventy Six Lakhs Fifty Four Thousand Three Hundred & Twenty One Only.
?>

When apply number_format on number with separator on thousands, result is wrong. This function accept number of any format
function format_price ( $number , $decPlaces , $decSep , $thouSep )<

//$number — number for format
//$decPlaces — number of decimal places
//$decSep — separator for decimals
//$thouSep — separator for thousands

//first remove all white spaces
$number = preg_replace ( ‘/\s+/’ , » , $number );
//split string into array
$numberArr = str_split ( $number );
//reverse array and not preserve key, keys will help to find decimal place
$numberArrRev = array_reverse ( $numberArr );

//find first occurrence of non number character, that will be a decimal place
//store $key into variable $decPointIsHere
foreach ( $numberArrRev as $key => $value ) <
if(! is_numeric ( $value )) <
if( $decPointIsHere == «» ) <
$decPointIsHere = $key ;
>
>
>

//decimal comma or whatever it is replace with dot
//$decPointIsHere is the key of the element that will contain decimal separator dot
if( $decPointIsHere != «» ) <
$numberArrRev [ $decPointIsHere ]= «.» ;
>

//again check through array for non numerical characters but skipping allready processed keys
//if is not number remove from array

//reverse back, at the start reversed array $numberArrRev to $numberArr
$numberArr = array_reverse ( $numberArrRev );

//create string from array
$numberClean = implode ( «» , $numberArr );

// apply php number_format function
return number_format ( $numberClean , $decPlaces , $decSep , $thouSep );

echo format_price ( «1 225 552, 55» , 2 , ‘,’ , ‘ ‘ ). «
» ;
echo format_price ( «1.225.552, 55» , 2 , ‘,’ , ‘ ‘ ). «
» ;
echo format_price ( «1’225’552. 55» , 2 , ‘,’ , ‘ ‘ ). «
» ;
echo format_price ( «1225552.55» , 2 , ‘,’ , ‘ ‘ ). «
» ;
?>
all results are: 1 225 552,55

I’d like to comment to the old notes of «stm555» and «woodynadobhar».
They wrote about «number_format_unlimited_precision()».
I guess many of us need that kind of function, which is the almost same function as number_format but don’t round a number.

Does Anyone know any new solution in a recent PHP version?

.
If no, how about the following function? (I fixed somethings like bugs of the function in the old comment.)
function number_format_unchanged_precision ( $number , $dec_point = ‘.’ , $thousands_sep = ‘,’ ) <
if( $dec_point == $thousands_sep ) <
trigger_error ( ‘2 parameters for ‘ . __METHOD__ . ‘() have the same value, that is «‘ . $dec_point . ‘» for $dec_point and $thousands_sep’ , E_USER_WARNING );
// It corresponds «PHP Warning: Wrong parameter count for number_format()», which occurs when you use $dec_point without $thousands_sep to number_format().
>
if( preg_match ( ‘<\.\d+>‘ , $number , $matches )=== 1 ) <
$decimals = strlen ( $matches [ 0 ]) — 1 ;
>else <
$decimals = 0 ;
>
return number_format ( $number , $decimals , $dec_point , $thousands_sep );
>
var_dump ( number_format_unchanged_precision ( 1234.5678 , ‘,’ , ‘.’ ));
var_dump ( number_format_unchanged_precision ( 1234.5678 , ‘,’ ));
var_dump ( number_format_unchanged_precision ( 12345678 ));
var_dump ( number_format_unchanged_precision (- 0.5678 , ‘,’ , ‘.’ )); // It occurred a bug with the function in the old comment.
?>
output is:
string(10) «1.234,5678»
PHP Warning: 2 parameters for number_format_unchanged_precision() have the same value, that is «,» for $dec_point and $thousands_sep in.
string(10) «1,234,5678»
string(10) «12,345,678»
string(7) «-0,5678»

// Here is a function that produces the same output as number_format() but also works with numbers bigger than 2^53.

function a_number_format($number_in_iso_format, $no_of_decimals=3, $decimals_separator=’.’, $thousands_separator=», $digits_grouping=3) <
// Check input variables
if (!is_numeric($number_in_iso_format)) <
error_log(«Warning! Wrong parameter type supplied in my_number_format() function. Parameter \$number_in_iso_format is not a number.»);
return false;
>
if (!is_numeric($no_of_decimals)) <
error_log(«Warning! Wrong parameter type supplied in my_number_format() function. Parameter \$no_of_decimals is not a number.»);
return false;
>
if (!is_numeric($digits_grouping)) <
error_log(«Warning! Wrong parameter type supplied in my_number_format() function. Parameter \$digits_grouping is not a number.»);
return false;
>

// Prepare variables
$no_of_decimals = $no_of_decimals * 1;

// Explode the string received after DOT sign (this is the ISO separator of decimals)
$aux = explode(«.», $number_in_iso_format);
// Extract decimal and integer parts
$integer_part = $aux[0];
$decimal_part = isset($aux[1]) ? $aux[1] : »;

// Adjust decimal part (increase it, or minimize it)
if ($no_of_decimals > 0) <
// Check actual size of decimal_part
// If its length is smaller than number of decimals, add trailing zeros, otherwise round it
if (strlen($decimal_part) 0) <
$aux = strrev($integer_part);
$integer_part = »;
for ($i=strlen($aux)-1; $i >= 0 ; $i—) <
if ( $i % $digits_grouping == 0 && $i != 0) <
$integer_part .= «<$aux[$i]><$thousands_separator>«;
> else <
$integer_part .= $aux[$i];
>
>
>

$original_number= 9223372036854775805;
echo a_number_format($original_number, 4, ‘.’,»‘»,3);
// Outputs: 9’223’372’036’854’775’805.1230

This function is used for reformatting already formatted numbers.
function formatNumber ( $number , $format =[], $oldDecimalSeparator = «,.·'» , $multiplier = 1 )
<
/**
$format — the array of formatting options, details in the example.
$oldDecimalSeparator — decimal separator used in the $number. If the separator can meet different characters, then you need to record them all, for example: ‘,.’.
$multiplier — typically used to adjust prices up or down.
*/
if ( $format ) <
$format += [ ‘numOfDecimals’ => 0 , ‘decimalSeparator’ => ‘.’ , ‘thousandSeparator’ => » ]; # Default format
# Find decimal separator
# The decimal separator is the one that is the last and does not occur more than once
if ( $letters = str_replace ( ‘ ‘ , » , $number )) < # Replace spaces
if ( $letters = preg_replace ( ‘/^-/’ , » , $letters )) < # Remove minus
if ( $letters = preg_replace ( ‘/[0-9]/’ , » , $letters )) < # Get all non digits
$lastletter = substr ( $letters , — 1 ); # Returns last char
if ( substr_count ( $letters , $lastletter ) == 1 ) <
if ( strpos ( $oldDecimalSeparator , $lastletter ) !== false )
$oldDecimalSep = $lastletter ;
else
return $number ;
>
>
>
>
$number = preg_replace ( ‘/[^0-9-]/’ , » , $number ); # Remove all non digits except ‘minus’
if ( $oldDecimalSep )
$number = str_replace ( $oldDecimalSep , ‘.’ , $number ); # Format to float
if ( $multiplier != 1 )
$number = $number * $multiplier ;
# Convert float to new format
$number = number_format ( $number ,
$format [ ‘numOfDecimals’ ],
$format [ ‘decimalSeparator’ ],
$format [ ‘thousandSeparator’ ]
);
>
return $number ;
>

/**
Example. Formatting data in which the decimal separator can occur as the comma and dot. Formatting into Russian format: -12 345,67
*/
echo formatNumber ( $number , [
‘numOfDecimals’ => 2 ,
‘decimalSeparator’ => ‘,’ ,
‘thousandSeparator’ => ‘ ‘
], ‘,.’ );

Be carreful, when you’re using French notation
means : number_format(124.25, 2 , ‘,’ , ‘ ‘) with ‘,’ as dec_point,

Don’t forget to specify thousands_sep that default is ‘,’ to another value, otherwise function will return null.

Number_format — Форматирует число с разделением групп

(PHP 3, PHP 4, PHP 5)

number_format — Форматирует число с разделением групп

Описание string number_format ( float number [, int decimals] )
string number_format ( float number, int decimals, string dec_point, string thousands_sep )

number_format() возвращает отформатированное число number . Функция принимает один, два или четыре аргумента (не три):

Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между группами цифр по 3.

Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между группами цифр по 3.

Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point , а в качестве разделителя групп — thousands_sep .

Используется только первый символ строки thousands_sep . Например, при передаче foo в качестве thousands_sep для форматирования числа 1000 , number_format() возвращает 1f000 .

Пример 1. Пример использования number_format()

Во Франции обычно используются 2 знака после запятой (‘,’), и пробел (‘ ‘) в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :

// английский формат (по умолчанию)
$english_format_number = number_format ( $number );
// 1,234


// французский формат
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56

// английский формат без разделителей групп
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57

number_format

number_format — Форматирует число с разделением групп

Описание

number_format() возвращает отформатированное число number . Функция принимает один, два или четыре аргумента (не три):

Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между группами цифр по 3.

Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между группами цифр по 3.

Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point , а в качестве разделителя групп — thousands_sep .

Используется только первый символ строки thousands_sep . Например, при передаче foo в качестве thousands_sep для форматирования числа 1000, number_format() возвращает 1f000.

Example#1 Пример использования number_format()

Во Франции обычно используются 2 знака после запятой (‘,’), и пробел (‘ ‘) в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :

// английский формат (по умолчанию)
$english_format_number = number_format ( $number );
// 1,234

// французский формат
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56

// английский формат без разделителей групп
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57

См. также описание функций sprintf(), printf() и sscanf().

Форматирование чисел: функция PHP number_format()

Функция PHP number_format () предназначена для поразрядного форматирования чисел с отделением дробной части. Конкретный формат полученного значения зависит от количества переданных аргументов. Функция может принять один, два или четыре параметра и возвращает обработанное значение в виде строки.

Форматируемое число

Первый и обязательный аргумент функции number_format() в PHP — это непосредственно число, которое нужно отформатировать. Выражение будет выглядеть так:

Параметр $number должен представлять собой число с плавающей точкой.

Результатом работы функции станет строка, содержащая исходное число, разбитое по разрядам. Дробная часть будет отброшена с округлением. В качестве разделителя разрядов используется запятая.

Во втором примере произошло округление дробной части.

Дробная часть

Если необходимо сохранить дробную часть, в функцию PHP number_format () необходимо передать второй аргумент.

$decimals — это целое число (integer), определяющее количество знаков после запятой, которое нужно сохранить. По умолчанию оно равно нулю, поэтому при передаче одного аргумента дробная часть отбрасывается.

Приняв два параметра, функция вернет отформатированную строку, использовав для разделителя целой и дробной части точку.

В этом случае также происходит округление дробной части. Вместо недостающих цифр подставляются нули.

Пользовательские разделители

Стандартные разделители, используемые функцией PHP number_format () можно заменить на любые другие символы. Третий параметр отвечает за отделитель дробной части, а четвертый — за межразрядный символ.

И $dec_point , и $thousands_sep являются строковыми данными. В качестве разделителя можно передать любой символ, а также пробел или пустую строку. Из последовательности символов будет использован только первый, остальные обрежутся.

Работа функции php number_format в примерах с четырьмя параметрами:

Разделители заменяются пользовательскими, все остальные правила сохраняются.

Функция PHP number_format () предоставляет программисту большой простор в форматировании числовых значений. Для получения адекватного результата важно соблюдать установленный спецификацией синтаксис и помнить о том, что возвращаемое функцией значение имеет строковый тип.

Форматирование числа с разделением

December 2020

2.5k раз

У меня есть следующие функции:

Как сделать его форматировать число, чтобы включить запятую в месте тысячных? Например, 50000 должен стать 50000.

5 ответы

Вы можете использовать number_format .

Использование Числового формата было правильным, чтобы получить хорошее форматирование, который вы ищете. Проблема, которую я думаю, что вы работаете в отношении изменения формата в вашей БД является то, что вы форматирование числа и resaving его над собой.

Попробуйте использовать временную переменную, таким образом ваша исходная переменная $ счетчик не изменится, и когда вы пишете обратно в базу данных, она по-прежнему будет находиться в форматировании вы хотите.

Обновленная версия коды, я предполагаю, что вы хотите только мету удерживающей запятой значения?

Было ли это то, что вы надеетесь? или если вы хотите только отформатировать этот номер таким образом при отображении пользователю, но дб оставаться собственным (не через запятую), после запроса в БД, сохранить как значение дб и создать разделенный запятыми переменную точно так, как я «ве сделано выше. Тогда на каких-либо функций БД, обратитесь к переменной $ количеству, так и на любых выходных функций пользователя, использовать переменную $ tmpCount.

Опять же, я надеюсь, что ответ на ваш вопрос, если это не так, просьба уточнить.

Илон Маск рекомендует:  Создание собственных диалоговых окон
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL