乘以浮点数,得到错误答案(php)

时间:2016-07-14 01:09:00

标签: php floating-point number-formatting

我有一个浮点数,它是来自cURL调用的返回数据,我希望乘以0.25%(收费)然后求和(将费用加到小计)

代码:

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

输出:

float(0.01191616)
0.00005958

我可以获得百分比金额,但不能将其添加到小计中。

如何计算费用和总和,浮动?

即。 0.01191616 * 0.0025 = $ fee

$ fee + 0.01191616 = $ new_grand_total

更新: 这是不正确的:

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

输出:

string(10) "0.00002976"

2 个答案:

答案 0 :(得分:1)

$obook['Bid'] *= 0.0025

表示将变量乘以0.0025,然后将结果放回$obook['Bid']。然后,当您向其添加$obook['Bid']时,您只是将结果加倍。

换句话说,您的代码相当于:

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

因此,您将失去$obook['Bid']的原始价值,仅用费用替换它,然后将费用添加到自身。

如果您不想更新变量,则应使用*,而不是*=

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

你也可以使用高中代数来实现x * y + x等同于x * (1+y),所以你可以这样做:

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

答案 1 :(得分:0)

改为:

$obook['bid'] *= 1.0025