0

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?

Raktim Biswas
  • 4,011
  • 5
  • 27
  • 32
moses toh
  • 12,344
  • 71
  • 243
  • 443
  • 1
    Read http://stackoverflow.com/questions/10221694/convert-number-into-xx-xx-million-format – aldrin27 Jun 24 '16 at 03:44
  • @aldrin27, Thank you. I had read it. The result `14.12 million`. I want change it to `14,12 million`. So using a comma. How to change it? – moses toh Jun 24 '16 at 04:05
  • In your spec, you have `100` is `100` and `1000` is `1,000` (comma = thousands separator) but `1000000000` is `1 billion` and `1781000000` is `1,781 billion` (comma = decimal separator). Is this inconsistency intended? – Paul S. Dec 10 '16 at 15:06

2 Answers2

3

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
Sergey Khalitov
  • 987
  • 7
  • 17
0

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
lubosdz
  • 4,210
  • 2
  • 29
  • 43