- Форматировать число до двух знаков после запятой в PHP
- 1. Использование number_format() функция
- 2. Использование sprintf() функция
- 3. Использование round() функция
- 4. Использование bcadd() функция
- number_format
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- User Contributed Notes 9 notes
- Округление чисел в PHP
- Округление к ближайшему целому
- Округление к большему
- round
- Список параметров
- Возвращаемые значения
- Примеры
- Список изменений
- Смотрите также
Форматировать число до двух знаков после запятой в PHP
В этой статье показано, как отформатировать число до двух знаков после запятой в PHP.
1. Использование number_format() функция
Вы можете использовать number_format() Функция для форматирования числа до нужного количества цифр после запятой. Он принимает четыре параметра: форматируемое число, количество устанавливаемых десятичных цифр, десятичный разделитель и разделитель тысяч в указанном порядке. Это работает, но возвращает отформатированную строку, а не число. Если вам нужно значение с плавающей запятой вместо строки, вы можете передать возвращенную строку в floatval() функция.
2. Использование sprintf() функция
В качестве альтернативы вы можете использовать sprintf() Функция для форматирования числа. Он создает строку в соответствии с указанной строкой форматирования. Вы можете отформатировать число до двух знаков после запятой, используя %.2f модификатор. Следующий пример кода демонстрирует:
3. Использование round() функция
Если вам нужно округлить значение до заданной точности после запятой, вы можете использовать round() функция. Следующий пример иллюстрирует его использование. Обратите внимание, что round() функция не добавляет нули в конце числа, чтобы соответствовать требуемым цифрам после запятой.
Режим округления по умолчанию round() является PHP_ROUND_HALF_UP который округляет число от нуля, когда оно находится на полпути. Есть несколько других констант, которые указывают режим, в котором происходит округление. Эти режимы PHP_ROUND_HALF_DOWN , PHP_ROUND_HALF_EVEN , а также PHP_ROUND_HALF_ODD , которые округляют указанное число до нуля, ближайшего четного значения и ближайшего нечетного значения соответственно.
4. Использование bcadd() функция
Наконец, вы можете использовать математическую функцию BC. bcadd() , который может складывать два своих операнда по заданному масштабу, указывая количество знаков после запятой в результате. Чтобы отформатировать число до двух знаков после запятой, вы можете использовать это число в качестве первого операнда и 0 в качестве второго операнда и указать масштаб 2. Следующий код демонстрирует:
number_format
Форматирует число сгруппированными тысячными и, возможно, десятичными цифрами, используя математическое правило округления.
Список параметров
Устанавливает число знаков после запятой. Если 0 , decimal_separator опускается в возвращаемом значении.
Устанавливает разделитель дробной части.
Устанавливает разделитель тысяч.
Возвращаемые значения
Отформатированное число num .
Список изменений
Версия | Описание |
---|---|
8.0.0 | До этой версии функция number_format() принимала один, два или четыре параметра (но не три). |
7.2.0 | number_format() была изменена, чтобы не возвращать -0 , ранее -0 могло быть возвращено в случаях, когда num был -0.01 . |
Примеры
Пример #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() — Разбирает строку в соответствии с заданным форматом
User Contributed Notes 9 notes
It’s not explicitly documented; number_format also rounds:
$numbers = 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
Note: use NumberFormatter to convert in human-readable format instead user function from comments:
echo NumberFormatter :: create ( ‘en’ , NumberFormatter :: SPELLOUT )-> format ( 12309 ); // twelve thousand three hundred nine
echo NumberFormatter :: create ( ‘ru’ , NumberFormatter :: SPELLOUT )-> format ( 12307.5 ); // двенадцать тысяч триста семь целых пять десятых
?>
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,».»,»,») .»,-«;
>
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
For Zero fill — just use the sprintf() function
$pr_id = 1;
$pr_id = sprintf(«%03d», $pr_id);
echo $pr_id;
$pr_id = 10;
$pr_id = sprintf(«%03d», $pr_id);
echo $pr_id;
You can change %03d to %04d, etc.
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 ];
>
?>
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’]);
>
My simpler solution to the problem of the decimal number in this function being longer than the specified number of decimals.
Standard result for number_format() is..
number_format(5.00098, 2) = 5.00
My function will return the result = 5.001
// ** Warning: Does not work with scientific notation. Conversion to a real number is required. **
echo auto_decimal_format ( 5.0005620 ); // print 5.0006
echo auto_decimal_format ( 5.0009820 ); // print 5.001
echo auto_decimal_format ( 5.00098 , 8 ); // print 5.00098000
echo auto_decimal_format ( 1.0295691366783E-5 , 2 ); // print 0.00
function auto_decimal_format ( $n , $def = 2 ) $a = explode ( «.» , $n );
if ( count ( $a )> 1 ) $b = str_split ( $a [ 1 ]);
$pos = 1 ;
foreach ( $b as $value ) if ( $value != 0 && $pos >= $def ) $c = number_format ( $n , $pos );
$c_len = strlen ( substr ( strrchr ( $c , «.» ), 1 ));
if ( $c_len > $def ) < return rtrim ( $c , 0 ); >
return $c ; // or break
>
$pos ++;
>
>
return number_format ( $n , $def );
>
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!
Округление чисел в PHP
В PHP для округления чисел применяются следующие функции:
Округление к ближайшему целому
Функция round($num, $precision) возвращает округлённое значение $num с указанной точностью $precision (количество цифр после запятой).
echo round(111.455); // 111 // Один знак после запятой echo round(111.455, 1); // 111.5 // Два знака после запятой echo round(111.455, 2); // 111.46
Также функция round() может округлять целую часть числа, для этого нужно указать отрицательный $precision .
// Один знак перед запятой echo round(111.455, -1); // 110 // Два знака перед запятой echo round(111.455, -2); // 100
Третьим аргументом функции можно повлиять способ округления.
PHP_ROUND_HALF_UP | Округляет от нуля, когда следующий знак находится посередине. То есть округляет 1.5 в 2 и -1.5 в -2. |
PHP_ROUND_HALF_DOWN | Округляет к нулю, когда следующий знак находится посередине. То есть округляет 1.5 в 1 и -1.5 в -1. |
PHP_ROUND_HALF_EVEN | Округляет до ближайшего чётного значения, когда следующий знак находится посередине. То есть округляет 1.5 и 2.5 в 2. |
PHP_ROUND_HALF_ODD | Округляет до ближайшего нечётного значения, когда следующий знак находится посередине. То есть округляет 1.5 в 1 и 2.5 в 3. |
Округление к большему
Функция ceil($num) – всегда округляет число в большую сторону.
echo ceil(1.1); // 2 echo ceil(1.5); // 2 echo ceil(1.6); // 2
round
Возвращает округлённое значение val с указанной точностью precision (количество цифр после запятой). Последняя может быть отрицательной или нулём (по умолчанию).
Замечание: PHP по умолчанию не может правильно обрабатывать строки типа «12,300.2». Для подробностей см. Преобразование строк в числа.
Список параметров
Количество десятичных знаков, до которых округлять
Используйте одну из этих констант для задания способа округления.
Константа | Описание |
---|---|
PHP_ROUND_HALF_UP | Округляет val в большую сторону от нуля до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 2 и -1.5 в -2. |
PHP_ROUND_HALF_DOWN | Округляет val в меньшую сторону к нулю до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 1 и -1.5 в -1. |
PHP_ROUND_HALF_EVEN | Округляет val до precision десятичных знаков в сторону ближайшего четного знака. |
PHP_ROUND_HALF_ODD | Округляет val до precision десятичных знаков в сторону ближайшего нечетного знака. |
Возвращаемые значения
Примеры
Пример #1 Пример использования round()
echo round ( 3.4 ); // 3
echo round ( 3.5 ); // 4
echo round ( 3.6 ); // 4
echo round ( 3.6 , 0 ); // 4
echo round ( 1.95583 , 2 ); // 1.96
echo round ( 1241757 , — 3 ); // 1242000
echo round ( 5.045 , 2 ); // 5.05
echo round ( 5.055 , 2 ); // 5.06
?>?php
Пример #2 Примеры использования параметра mode
echo round ( 9.5 , 0 , PHP_ROUND_HALF_UP ); // 10
echo round ( 9.5 , 0 , PHP_ROUND_HALF_DOWN ); // 9
echo round ( 9.5 , 0 , PHP_ROUND_HALF_EVEN ); // 10
echo round ( 9.5 , 0 , PHP_ROUND_HALF_ODD ); // 9
?php
echo round ( 8.5 , 0 , PHP_ROUND_HALF_UP ); // 9
echo round ( 8.5 , 0 , PHP_ROUND_HALF_DOWN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_EVEN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_ODD ); // 9
?>
Пример #3 Примеры использования параметра mode с указанием точности
/* Использование PHP_ROUND_HALF_UP с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_UP ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_UP ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_UP ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_UP ); // -1.5
?php
/* Использование PHP_ROUND_HALF_DOWN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5
/* Использование PHP_ROUND_HALF_EVEN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // -1.5
/* Использование PHP_ROUND_HALF_ODD с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
?>
Список изменений
Версия | Описание |
---|---|
5.3.0 | Был добавлен параметр mode . |
5.2.7 | Работа функции round() была изменена в соответствии со стандартом C99. |
Смотрите также
- ceil() — Округляет дробь в большую сторону
- floor() — Округляет дробь в меньшую сторону
- number_format() — Форматирует число с разделением групп