2017-10-16 64 views
0

我有一些代碼,它檢查我們賬戶上的付款金額是否與應該基於購買的項目相同。PHP:奇怪的類型轉換和舍入

下面是一些「僞」:

$income = $this->getIncome(); 
$invoiceSum = $order->getInvoiceSum(); 
if($income != $invoiceSum) echo "Error"; 

使我有「錯誤」的輸出,即使值是相同的。

$收入的價值來自Rest API(JSON),其中$ invoiceSum由我的代碼根據所有訂購產品的淨值乘以稅率計算得出。

如果我這樣做:

echo $income . " " . gettype($income) . "<br>"; 
echo $invoiceSum . " " . gettype($invoiceSum) . "<br>"; 

我得到:

19.71 double 
19.71 double 

這是我的期望。

所以我試圖計算爲intvalues(= Cent而不是€)。而現在怪異的一部分開始:

echo intval($income * 100); 
echo intval($invoiceSum * 100); 

,我也得到:

1970 
1971 

嗯?如何解決這個問題,所以我得到正確的價值?

+0

它以紅色突出顯示的['float']的文檔(http://php.net/在manual/en/language.types.float.php#language.types.float.comparison)類型。 – axiac

+0

而btw,['intval()'](http://php.net/manual/en/function.intval.php)不會輪到。它截斷。而這會讓你對浮點數如何陷入困境不瞭解。 – axiac

+0

@bernhardh無法複製錯誤 – shashi

回答

0

here,得到你想要的輸出,你可能不得不這樣做

var_dump((int)($income * 100)); 
var_dump((int)($invoiceSum * 100)); 
+0

謝謝,但我剛剛解決它與圓:'圓($收入,2)!=圓($ invoiceSum,2)' – bernhardh

+0

@bernhardh不客氣 – kellymandem