dooode dooode - 1 year ago 53
PHP Question

multiplying a float, getting wrong answer (php)

I have a float that is return data from a cURL call, that I would like multiply by 0.25% (a fee) and then sum (add fee to subtotal)


echo number_format(($obook['Bid'] *= 0.0025) + $obook['Bid'], 8););



I am able to get the percentage amount, but not add it to the subtotal.

How to I calculate a fee and sum, to a float?

i.e. 0.01191616 * 0.0025 = $fee

$fee + 0.01191616 = $new_grand_total

This is not correct:

$commis = $obook['Bid'] *= 0.0025;
var_dump(number_format($commis, 8));


string(10) "0.00002976"

Answer Source
$obook['Bid'] *= 0.0025

means to multiply the variable by 0.0025 and then put that result back in $obook['Bid']. Then when you add $obook['Bid'] to it, you're just doubling that result.

In other words, your code is equivalent to:

$obook['Bid'] = $obook['Bid'] * 0.0025;
echo number_format(2 * $obook['Bid'], 8);

Because of this, you're losing the original value of $obook['Bid'], replacing it with just the fee, and then adding the fee to itself.

You should use *, not *=, if you don't want to update the variable.

$new_grand_total = $obook['Bid'] * 0.0025 + $obook['Bid'];

You can also use high school algebra to realize that x * y + x is equivalent to x * (1+y), so you can do:

$new_grand_total = $obook['bid'] * 1.0025;