2016-07-14 29 views
1

我有一個浮動是由捲曲調用返回的數據,我會乘喜歡0.25%(費用),然後求和(加費進行分類彙總)乘以一個浮動,得到錯誤的答案(PHP)

代碼:

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 = $費

$費+ 0.01191616 = $ new_grand_total

UPDATE: 這是不正確的:

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

輸出:

string(10) "0.00002976" 
+0

你爲什麼還在使用更新中有'* ='?你還不明白'*'和'* ='之間的區別嗎? – Barmar

回答

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; 
+0

然後它吐出不好的數學。 0.01190264次0.0025加0.01190264等於0.01193239在我的計算器上。 – dooode

+0

你從哪裏得到'0.01190264'?原始值是'0.01191616'。當你乘以0.0025時,你得到了'0.0000297904',當你加倍時,結果是'0.00005958'。 – Barmar

+0

@dooode你爲什麼要爲它添加'0.01190264'?難道你不明白答案的主要觀點嗎?那就是你添加了乘法的結果,而不是原始值? – Barmar

0

做到這一點,而不是:

$obook['bid'] *= 1.0025 
+0

那麼小計總結呢?這隻給出了費用金額。 – dooode

+0

如果您使用'0.0025',它只會收取費用。我用'1.0025' – BeetleJuice

+0

得到的費用是沒有問題的。將費用加回到「按照費用計算」的小計中是我的問題所在。 – dooode