Rounding A Number To Nearest The Thousand In PHP

6th January 2008 - 3 minutes read time

I have previously talked about rounding numbers in PHP, but what if you wanted to round the number to the nearest thousand?

It is possible to do this with the native round() function in PHP by using a negative number as the second parameter. The round() function has two parameters, the first is the number to be rounded and the second is the number of places to round the number to, also known as the precision. The default for round() is to round the number to the nearest whole number, by using positive numbers as the second parameter you can set the number of decimal places to round the number to. Giving a negative number as the second parameter will allow you to round the number to the nearest full number. For example, to round a number to the nearest thousand you can put -3 as the precision, this will change the number 12,345 into 12000.

Here is a full example:

  1. $num = 123456789;
  3. echo round($num,0); // whole number - prints 123456789
  4. echo round($num,-1); // ten - prints 123456790
  5. echo round($num,-2); // hundred - prints 123456800
  6. echo round($num,-3); // thousand - prints 123457000
  7. echo round($num,-4); // ten thousand - prints 123460000
  8. echo round($num,-5); // hundered thousand - prints 123500000
  9. echo round($num,-6); // million - prints 123000000
  10. echo round($num,-7); // ten million - prints 120000000
  11. echo round($num,-8); // hundred million - prints 100000000
  12. echo round($num,-9); // billion - prints 0

Note that if you set the precision to be more than the actual number present then you with either get the next highest number or zero. For example, when rounding the number 15, if the precision is -1 then the result is 20 as this is the nearest full ten. However, if -2 is used then the result is 0 as this is the nearest full hundred.

This can cause errors if you are rounding lots of different sized values, so a neat little trick is to use the strlen() function to find out how many characters are in a number and then round to the nearest largest number. You can take the number of characters, subtract 1 to make it one less than the length of the string or you will round some numbers down to zero. You then multiply this value by -1 to invert it.

  1. $num = 151;
  2. $round = (strlen($num)-1)*-1;
  3. echo round($num,$round); // prints 200



I am trying to round $705,666.66 to the nearest whole thousand. Is $706,000 correct?



Anonymous (Mon, 06/27/2011 - 00:30)


thank you soo much for the.. it was a great help. :) :) :)

Anonymous (Sat, 02/11/2012 - 05:47)

I found that not casting the $num variable as an integer before passing it to strlen() caused strlen to count length wrong if $num is a float, thus breaking your code. Here's a function I wrote around your code:
  1. #Function to get original amount after percent increase or decrease
  2. function getOriginalAmountAfterPercentChange($currentNum, $percentChange){
  3. $number = ($currentNum / ($percentChange + 1) * 100); #Get current number
  4. $precision = ((strlen((int)$number) -3) * -1); #Figure out what precision to round to
  5. return round($number, $precision);
  6. }

Juan Sanchez (Fri, 07/13/2012 - 19:21)

Add new comment

The content of this field is kept private and will not be shown publicly.