James69
James69

Reputation: 239

How to cut decimal number using PHP

I have a code where I got some numbers like this:

92.682926829268 

I'd like to cut them like this:

92.68

This is my code:

<td><?php if (($row['TotalMatch']) > 10){ echo ($row['OK_05'] / $row['TotalMatch']) * 100; }   ?></td>

I tried with floor and round but I get that example I showed at the beginning of post ( 92.682926829268 instead of 92.68 )

Thanks for your attention

Regards!

EDIT Could you give me an example with my code? Thanks

Upvotes: 2

Views: 7923

Answers (5)

Don&#39;t Panic
Don&#39;t Panic

Reputation: 41820

The expression you're trying to format is this:

($row['OK_05'] / $row['TotalMatch']) * 100

So whichever function you decide to use needs to go around that expression.

As to which function to use, you need to select one that returns a string, not a float.

If you use round, and your expression returns a float that rounds to a number with two zeros after the decimal point, the trailing zeros will not be displayed in the result. For example, echo round(92.0006829268, 2) will display 92, not 92.00. So don't use round if you need to be sure that two decimal places are always displayed. round is a math function, not a formatting function.

floor is really not useful at all here, as it returns a number with no decimal places.


A simple way is to use sprintf as shown in some of the other answers.

echo sprintf("%.2f", ($row['OK_05'] / $row['TotalMatch']) * 100);

The first argument to sprintf is "%.2f", which is a format string indicating that the second argument should be displayed as a float with two decimal places. The second argument is your expression.

Using bcdiv as suggested in the other answer will also work, but it works a little differently that sprintf and will produce a slightly different result in some cases.

sprintf will round to the number of decimal places specified, so for example

echo sprintf("%.2f", 926.89 / 10);   // outputs 92.69

and bcdiv will truncate instead, so

echo bcdiv(926.89, 10, 2);           // outputs 92.68

Whichever one of those works for you, do that.

Upvotes: 4

powtac
powtac

Reputation: 41070

You could use bcdiv()

bcdiv($row['OK_05'], ($row['TotalMatch'] * 100), 2);

Upvotes: 0

Amila
Amila

Reputation: 44

Try using sprintf like below:

<?php
$mynumber = 98.343434;
echo sprintf('%.2f', $mynumber);    // this will output 98.34

Upvotes: 0

driconmax
driconmax

Reputation: 942

You can use the round function

$var = 92.682926829268;
$var = round($var, 2)

Or use sprintf (%.2f cuts the number)

$var = sprintf("%.2f", $var);

Upvotes: 3

James Wallen-Jones
James Wallen-Jones

Reputation: 1288

Use sprintf() to format the number.

echo sprintf("%.2f", 92.682926829268);

Example: https://3v4l.org/U87T9

Upvotes: 7

Related Questions