2017-10-16 10 views
0

私は、私たちのアカウントの支払い金額が購入した商品に基づいている必要がある金額と同じであるかどうかを確認するいくつかのコードを持っています。PHP:奇妙な型キャスティングと丸め

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

値が同じであっても、私に「エラー」出力が得られます。ここでは

は、いくつかの「擬似コード」です。

$ incomeの値はRest API(JSON)の値です。ここで、$ invoiceSumは、すべての注文商品に税率を乗じた正味額に基づいて計算されます。

は私が行う場合:

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

は私が取得:

19.71 double 
19.71 double 

私が期待するものです。

私はint値(=€の代わりに= Cent)として計算しようとしました。そして今、奇妙な部分が開始されます:

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

と私は得る:

1970 
1971 

フム?これを修正する方法は、私は正しい値を得る? hereから

+0

を行う必要があります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

、あなたが望む出力を得るために、あなたはそれが[ `float`](http://php.net/のドキュメントに赤で強調表示され、この

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

ありがとうございますが、私はちょうどラウンドでそれを解決しました: 'round($ income、2)!= round($ invoiceSum、2)' – bernhardh

+0

@bernhardh – kellymandem