user1593846
user1593846

Reputation: 756

Using number_format to get decimals

I got a few values I want to sum up and check agains another number like this:

$a = '15';
$b = '5,50';
$c = '-10';
$to_pay = '10,50';
$formated_total = number_format(($a+$b+($c)), 2, ',', ' ');
$this->assertEquals($to_pay, $formated_total);

the asser part is a selenium function I am using so dont think about that, it's just supposed to check if the 2 values are the same. Now the result I get is:

 - Expected
 + Actual
 -'10,50'
 +'10,00'

Why am I losing the value from the decimals?

Upvotes: 1

Views: 149

Answers (2)

Robert
Robert

Reputation: 20286

You should not use "," as decimal point it's not excel. In PHP you need to use DOT

Change your numbers to:

$a = '15';
$b = '5.50';
$c = '-10';
$to_pay = '10.50';

or even better solution would be treat them as numbers not as strings

Change your numbers to:

$a = 15;
$b = 5.50;
$c = -10;
$to_pay = 10.50;

In that way you would get error if you tried using , instead of .

You can also simplify this line:

$formated_total = number_format(($a+$b+($c)), 2, ',', ' ');

to

$formated_total = number_format($a+$b+$c, 2, ',', ' ');

You may be curious why the result is 10. It's because during casting it to number php parser checks in 5,50 the number at the begining which is 5 and ignores the rest.

From manual:

If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

Upvotes: 3

Voitcus
Voitcus

Reputation: 4446

Because comma is not a valid decimal point. You need to "convert" $b and $to_pay values to use dots.

Upvotes: 2

Related Questions