number_format
Formats a number with grouped thousands and optionally decimal digits using the rounding half up rule.
Parameters
The number being formatted.
Sets the number of decimal digits. If 0 , the decimal_separator is omitted from the return value.
Sets the separator for the decimal point.
Sets the thousands separator.
Return Values
A formatted version of num .
Changelog
Version | Description |
---|---|
8.0.0 | Prior to this version, number_format() accepted one, two, or four parameters (but not three). |
7.2.0 | number_format() was changed to not being able to return -0 , previously -0 could be returned for cases like where num would be -0.01 . |
Examples
Example #1 number_format() Example
For instance, French notation usually use two decimals, comma (‘,’) as decimal separator, and space (‘ ‘) as thousand separator. The following example demonstrates various ways to format a number:
// english notation (default)
$english_format_number = number_format ( $number );
// 1,235
// French notation
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56
// english notation without thousands separator
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57
See Also
- money_format() — Formats a number as a currency string
- sprintf() — Return a formatted string
- printf() — Output a formatted string
- sscanf() — Parses input from a string according to a format
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!
Вернуть последние 2 цифры числа
Но, учитывая тот факт, что вы здесь разбираете дату, было бы разумнее использовать функцию даты. p.e. strtotime() и date() или даже:
format('Y'); // prints "2012" .. (see date formats)
Для чисел вы можете использовать функцию php по модулю (http://php.net/manual /en/internals2.opcodes.mod.php):
departureDate->year; echo $year % 100; ?>
Вы можете использовать простую аритиметическую операцию, например эту .
Может быть решение получше, но это подойдет
Пример 1. Вы можете просто разделить теги с помощью strip_tags и использовать substr
$number = '200912 ' ; $year = substr(strip_tags($number), 0,2); var_dump($year);
Пример 2: Вы также можете использовать simplexml_load_string с substr
$number = '200912 ' ; $year = substr(simplexml_load_string($number),0,2); var_dump($year);
Преобразовать его в строку. затем возьмите первые два элемента.
В java это можно сделать с помощью следующего кода. Пусть переменная представляет собой целое число с именем x. тогда вы можете использовать
byte[] array= Integer.toString(x).get.bytes().
Теперь array [0] и array [1] — это первые две цифры. array [array.length-1] и array [array.length] — последние два.
В java вы можете сделать это, следуя коду. Пусть переменная является целым числом с именем x . тогда вы можете использовать byte[] array= Integer.toString(x).get.bytes(). Теперь массив [0] и массив [1] — это первые две цифры.
Я думаю, что не имеет значения, используете ли вы java или php. Идея – это главное. вы можете легко найти эквивалентные функции php в Интернете. Вот почему .
Вы можете просто указать его как строку, функция substr преобразует его автоматически:
departureDate->year; echo substr( $year, -2 ); ?>
Внимательно изучите функцию substr. Если вы хотите, чтобы результат был строгим целым числом, просто добавьте (int) перед возвращением.
Но, как сказал январь, вам лучше работать с ним как с датой:
departureDate->year; $date = DateTime::createFromFormat( 'dmy', $year ); echo date( "y", $date->getTimestamp() ); ?>
Форум PHP программистов ► PHP практикум ► PHP для начинающих
Сообщений: 194
Пользователь №: 19799
На форуме:
Карма:
Допустим есть числа, 231, 2, 4, 431, 533
Мне нужно выводить в поле смотрел: 231 раз, 2 раз и.т.д
Чтобы не было 2 раз, нужно сделать 2 раза!
Тоесть должно выглядеть:
231 раз, 2 раза, 4 раза, 477 раз, 533 раза
Теоритически можно сделать если число оканчивается на 2,3 или 4 то подставлять «а», вот только как это сделать не знаю!
Помогите PLEASE!
Я бы обращался к числу как к строке, конкретнее как к массиву символов. И брал бы последний элемент массива.
web-monster
Глаза шире, и видим первый предложенный вариант. гораздо корректней, чем приводить к строке и т.д.
$последняяЦыфра = $чысло % 10;
$str=(string) 124314;
echo $str[strlen($str)-1];
Я из этой темы удалил кучу флуда, и в т.ч. свои сообщения. Потому что оказался втянут в какой-то бессмысленный спор «ни о чем».
Еще два велосипедиста. Чем вас чисто математическое решение не устраивает то? оно лучше во всех отношениях
glock18 — не велосипедисты, а рационализаторы И, к тому же, решение с остатком от деления мне больше нравится. Только я не успел его первым написать, когда тема появилась.
Но и со строкой тоже вполне приемлимо Именно когда просто отрезаем последнюю цифру.
Зададим переменной «a» любое число, разделим на 10 и получившееся значение разделится на целую и десятичную часть. С помощью explode разделим обе части в разные элементы массива и если вторая (правая часть числа) оканчивается на 2 или 3, то переменная «c» будет иметь значение «раза» если же нет, то «раз».
Выведим переменные а и с.
$a=231;
$b=$a/10;
$element=explode(«.», $b);
if($element[1]==2 or $element[1]==3 or $element[1]==4)$c=» раза»;>
else $c=» раз»;>
echo $a.$c;
ak167 — скрипт твой
1. Неоптимальный
2. Неверный
—
Легко заменяется на давным-давно озвученный в этой теме
2. Возьми $a=12 или $a=13 и посмотри, что получишь на выходе.
if($kolvo_prosmotrov_you=="12"||$kolvo_prosmotrov_you=="13"||$kolvo_prosmotrov_you=="14")
$a="раз";
>
else
$kolvo_vsego_count = $kolvo_prosmotrov_you % 10;
if($kolvo_vsego_count=="2"||$kolvo_vsego_count=="3"||$kolvo_vsego_count=="4")
$a="раза";
>
else
$a="раз";
>
>
Только вот интересно, а если нужно будет подставлять не только к одному значению $kolvo_prosmotrov_you, а ещё к 4 например.
Как тогда быть, не писать же 4 раза такую кучу кода
А вот для этого и существует такое понятие, как функция, написанная пользователем.
И еще. Возьми число 112 — что получишь?
Как я могу отделить число и получить первые две цифры в PHP?
Как я могу отделить число и получить первые две цифры в PHP?
Например: 1345 -> Мне нужен этот вывод => 13 или 1542 Я хочу 15 .
одной из возможностей было бы использовать substr :
РЕДАКТИРОВАТЬ:
пожалуйста, не то, что, как сказал Хакре , это сломается для отрицательных чисел или небольших чисел с десятичными знаками. его решение лучше, поскольку он делает некоторые проверки, чтобы избежать этого.
Прежде всего, вам нужно нормализовать свой номер, потому что не все числа в PHP состоят только из цифр. Возможно, вы ищете целое число:
Проблемы, с которыми вы можете столкнуться здесь, – это диапазон целых чисел в PHP или проблемах округления, см. Integer Docs , INF .
Поскольку число теперь является целым числом, вы можете использовать его в контексте строки и извлекать первые два символа, которые будут первыми двумя цифрами, если число не является отрицательным. Если число отрицательное, знак должен быть сохранен:
$twoDigits = substr($number, 0, $number < 0 ? 3 : 2);
Не должно быть слишком сложно? Простая подстрока должна делать трюк (вы можете обрабатывать числа как строки на свободно типизированном языке, таком как PHP).
См. Справочную страницу PHP для функции substr() .
$output = substr($input, 0, 2); //get first two characters (digits)
Вы можете получить строковое значение своего номера, а затем получить нужную часть с помощью substr .
Если вы не хотите использовать substr, вы можете разделить свой номер на 10, пока он не будет иметь 2 цифры:
дадут вам первые две цифры