Show a number to two decimal places

PhpFormattingNumbersRoundingNumber Formatting

Php Problem Overview


What's the correct way to round a PHP string to two decimal places?

$number = "520"; // It's a string from a database

$formatted_number = round_to_2dp($number);

echo $formatted_number;

The output should be 520.00;

How should the round_to_2dp() function definition be?

Php Solutions


Solution 1 - Php

You can use number_format():

return number_format((float)$number, 2, '.', '');

Example:

$foo = "105";
echo number_format((float)$foo, 2, '.', '');  // Outputs -> 105.00

This function returns a string.

Solution 2 - Php

Use round() (use if you are expecting a number in float format only, else use number_format() as an answer given by Codemwnci):

echo round(520.34345, 2);   // 520.34
echo round(520.3, 2);       // 520.3
echo round(520, 2);         // 520

From the manual:

> ### Description: float round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]);

> Returns the rounded value of val to specified precision (number of digits after the decimal point). precision can also be negative or zero (default).

...

> ### Example #1 round() examples >

> ###Example #2 mode examples > 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 ?>

Solution 3 - Php

Alternatively,

$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00

Solution 4 - Php

http://php.net/manual/en/function.round.php

e.g.

echo round(5.045, 2);    // 5.05

echo round(5.055, 2);    // 5.06

Solution 5 - Php

Try:

$number = 1234545454; 
echo  $english_format_number = number_format($number, 2); 

The output will be:

1,234,545,454.00

Solution 6 - Php

Use the PHP number_format() function.

For example,

$num = 7234545423;
echo number_format($num, 2);

The output will be:

7,234,545,423.00

Solution 7 - Php

You can use the PHP printf or sprintf functions:

Example with sprintf:

$num = 2.12;
echo sprintf("%.3f", $num);

You can run the same without echo as well. Example: sprintf("%.3f", $num);

Output:

2.120

Alternatively, with printf:

echo printf("%.2f", $num);

Output:

2.124

Solution 8 - Php

Another more exotic way to solve this issue is to use bcadd() with a dummy value for the $right_operand of 0.

$formatted_number = bcadd($number, 0, 2);

Solution 9 - Php

bcdiv($number, 1, 2) // 2 varies for digits after the decimal point

This will display exactly two digits after the decimal point.

Advantage:

If you want to display two digits after a float value only and not for int, then use this.

Solution 10 - Php

$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', ''); 

It will return 5.98 without rounding the number.

Solution 11 - Php

Use the PHP number_format() function.

Solution 12 - Php

Here I get two decimals after the . (dot) using a function...

function truncate_number($number, $precision = 2) {

    // Zero causes issues, and no need to truncate
    if (0 == (int)$number) {
        return $number;
    }

    // Are we negative?
    $negative = $number / abs($number);

    // Cast the number to a positive to solve rounding
    $number = abs($number);

    // Calculate precision number for dividing / multiplying
    $precision = pow(10, $precision);

    // Run the math, re-applying the negative value to ensure
    // returns correctly negative / positive
    return floor( $number * $precision ) / $precision * $negative;
}

Results from the above function:

echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789);    // 2.56
echo truncate_number(2.56789, 3); // 2.567

echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789);    // -2.56
echo truncate_number(-2.56789, 3); // -2.567

New Correct Answer

Use the PHP native function bcdiv

echo bcdiv(2.56789, 1, 1);  // 2.5
echo bcdiv(2.56789, 1, 2);  // 2.56
echo bcdiv(2.56789, 1, 3);  // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567

Solution 13 - Php

For conditional rounding off ie. show decimal where it's really needed otherwise whole number

123.56 => 12.56

123.00 => 123

$somenumber = 123.56;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
	$somenumber = intval($somenumber);
}

echo $somenumber; // 123.56


$somenumber = 123.00;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
	$somenumber = intval($somenumber);
}

echo $somenumber; // 123 	

Solution 14 - Php

I make my own.

$decimals = 2;
$number = 221.12345;
$number = $number * pow(10, $decimals);
$number = intval($number);
$number = $number / pow(10, $decimals);

Solution 15 - Php

round_to_2dp is a user-defined function, and nothing can be done unless you posted the declaration of that function.

However, my guess is doing this: number_format($number, 2);

Solution 16 - Php

$twoDecNum = sprintf('%0.2f', round($number, 2));

The rounding correctly rounds the number and the sprintf forces it to 2 decimal places if it happens to to be only 1 decimal place after rounding.

Solution 17 - Php

use roud(yourValue,decimalPoint) or number_format(yourValue,decimalPoint);

number_format() return value as string like this type 1,234.67. so in this case you can not use it for addition or any calculation. if you try then you have to deal with Number Format Error...

In this case round(121222.299000000,2) will be better option. The result would be 121222.29 ...

Solution 18 - Php

If you want to use two decimal digits in your entire project, you can define:

bcscale(2);

Then the following function will produce your desired result:

$myvalue = 10.165445;
echo bcadd(0, $myvalue);
// result=10.11

But if you don't use the bcscale function, you need to write the code as follows to get your desired result.

$myvalue = 10.165445;
echo bcadd(0, $myvalue, 2);
// result=10.11

To know more

Solution 19 - Php

$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89

This will give you 2 number after decimal.

Solution 20 - Php

Adding to other answers, since number_format() will, by default, add thousands separator.

To remove this, do this:

$number = number_format($number, 2, ".", "");

Solution 21 - Php

Number without round

$double = '21.188624';
echo intval($double) . '.' . substr(end(explode('.', $double)), 0, 2);

Solution 22 - Php

Here's another solution with strtok and str_pad:

$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')

Solution 23 - Php

  • Choose the number of decimals
  • Format commas(,)
  • An option to trim trailing zeros

> Once and for all!

function format_number($number,$dec=0,$trim=false){
  if($trim){
    $parts = explode(".",(round($number,$dec) * 1));
    $dec = isset($parts[1]) ? strlen($parts[1]) : 0;
  }
  $formatted = number_format($number,$dec); 
  return $formatted;
}

Examples

echo format_number(1234.5,2,true); //returns 1,234.5
echo format_number(1234.5,2);      //returns 1,234.50
echo format_number(1234.5);        //returns 1,235

Solution 24 - Php

In case you use math equation like I did you can set it like this:

{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}

Solution 25 - Php

That's the same question I came across today and want to round a number and return float value up to a given decimal place and it must not be string (as returned from number_format) the answer is

echo sprintf('%.' . $decimalPlaces . 'f', round($number, $decimalPlaces));

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRich BradshawView Question on Stackoverflow
Solution 1 - PhpCodemwnciView Answer on Stackoverflow
Solution 2 - PhpSomnath MulukView Answer on Stackoverflow
Solution 3 - PhpMarc BView Answer on Stackoverflow
Solution 4 - PhpSystemX17View Answer on Stackoverflow
Solution 5 - PhpBijuView Answer on Stackoverflow
Solution 6 - PhpSani KamalView Answer on Stackoverflow
Solution 7 - PhpAditya P BhattView Answer on Stackoverflow
Solution 8 - PhppowtacView Answer on Stackoverflow
Solution 9 - PhpWasim A.View Answer on Stackoverflow
Solution 10 - PhpmrphpguruView Answer on Stackoverflow
Solution 11 - PhpShamim Hafiz - MSFTView Answer on Stackoverflow
Solution 12 - PhpMr. HKView Answer on Stackoverflow
Solution 13 - PhpVinayView Answer on Stackoverflow
Solution 14 - PhpjoanlgrView Answer on Stackoverflow
Solution 15 - PhpajrealView Answer on Stackoverflow
Solution 16 - PhpJohnSView Answer on Stackoverflow
Solution 17 - PhppankajView Answer on Stackoverflow
Solution 18 - PhpjewelhuqView Answer on Stackoverflow
Solution 19 - PhpS'copion SamView Answer on Stackoverflow
Solution 20 - PhpGlorious KaleView Answer on Stackoverflow
Solution 21 - PhpAbhishek SharmaView Answer on Stackoverflow
Solution 22 - PhpBryanView Answer on Stackoverflow
Solution 23 - PhpKareemView Answer on Stackoverflow
Solution 24 - PhppaulalexandruView Answer on Stackoverflow
Solution 25 - PhpRehan AnisView Answer on Stackoverflow