I want make number format like this (there are 3 point):
Point 1
=> If it is below one million (0-999999), then the result is like this :
1 => 1
10 => 10
100 => 100
1000 => 1,000
10000 => 10,000
100000 => 100,000
999999 => 999,999
Point 2
=> If it is below one billion (1000000-999999999), the the result is like this :
1000000 => 1 million
1260000 => 1,26 million
234500000 => 234,5 million
Point 3
=> If it is over one billion (>=1000000000), the the result is like this :
1000000000 => 1 billion
1781000000 => 1,781 billion
12781000000 => 12,781 billion
I can only work on point 1
The code is like this :
<?php
function format_rp($value) {
return number_format($value, 0, ',', ',');
}
echo format_rp(115000);
?>
I was confused for a work point 2 and point 3
Any solution to solve my problem?
Here is function i wrote for you:
function my_number_format($number, $thousands_separator=',') {
static $words = array(null, null/*'thousand'*/, 'million', 'billion', 'trillion' , /*etc*/);
$parts = explode(',', number_format($number, 0, null, ','));
$index = count($parts)-1;
if($words[$index]){
$divider = pow(1000, $index);
$result = round($number/$divider, 3);
$result = str_replace('.', $thousands_separator, $result).' '.$wordss[$index];
} else {
$result = join($thousands_separator, $parts);
}
return $result;
}
Same function in short syntax:
function my_number_format($number, $thousands_separator=',') {
static $words = array(null, null/*'thousand'*/, 'million', 'billion', 'trillion' , /*etc*/);
$parts = explode(',', number_format($number, 0, null, ','));
$index = count($parts)-1;
return $words[$index]
? str_replace('.', $thousands_separator, round($number/pow(1000,$index),3)).' '.$words[$index]
: join($thousands_separator, $parts);
}
Test:
echo my_number_format(1); // 1
echo my_number_format(10); // 10
echo my_number_format(100); // 100
echo my_number_format(1000); // 1,000
echo my_number_format(10000); // 10,000
echo my_number_format(100000); // 100,000
echo my_number_format(999999); // 999,999
echo my_number_format(1000000); // 1 million
echo my_number_format(1260000); // 1,26 million
echo my_number_format(234500000); // 234,5 million
echo my_number_format(1000000000); // 1 billion
echo my_number_format(1781000000); // 1,781 billion
echo my_number_format(12781000000); // 12,781 billion
This works for any number of thousand groups:
function numberToThousands($number, $decimals = 2) {
$units = ['', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion'];
$groups = floor((strlen(intval($number))-1)/3);
$number /= pow(1000, $groups);
return round($number, $decimals) .' '. $units[$groups];
}
numberToThousands(123456); // 123.46 thousand