簡體   English   中英

PHP-比較2個浮點值時的奇怪結果

[英]PHP - Strange result when compare 2 float values

我正在嘗試比較PHP中的2個值。

我的邏輯是:

  1. 我還有剩余金額(a)
  2. 我有一筆要收取的款項(b)
  3. 我計算余數為(a-b)
  4. 充電后,我得到了實際的剩余價值(c)
  5. 我將在#3中獲得的值與(c)進行比較

即使兩者相似,PHP表示它們並不相等。

下面給出的是我的代碼(帶有填充值)

<?php
$remaining_amount_before_payment = "600";
$remaining_amount_after_payment = (float)$remaining_amount_before_payment - (float)"387.60";
$actual_remaining_amount_after_payment = "212.4";
echo "actual_remaining_amount_after_payment: {$actual_remaining_amount_after_payment} <br><br>";
echo "remaining_amount_after_payment: {$remaining_amount_after_payment} <br><br>";
var_dump( ((float)$actual_remaining_amount_after_payment) == ((float)$remaining_amount_after_payment) );?>

我鍵入將值var_dumpfloat ,但是var_dump返回FALSE

有人可以幫我找出原因嗎?

我正在使用PHP 5.6。

提前致謝!

使用var_dump(abs(floatval($ actual_remaining_amount_after_payment)== floatval($ remaining_amount_after_payment))== 0);

答對了!

經過幾次嘗試,我抓住了陷阱。 我快瘋了。

“問題”位於正確的舍入值內

$remaining_amount_before_payment = floatval("600"); // use floatval istead of (float)
$remaining_amount_after_payment = round($remaining_amount_before_payment - floatval("387.60"), 2);// use floatval istead of (float) and round result
$actual_remaining_amount_after_payment = floatval("212.4");// use floatval
echo "actual_remaining_amount_after_payment: {$actual_remaining_amount_after_payment} <br><br>";
echo "remaining_amount_after_payment: {$remaining_amount_after_payment} <br><br>";

var_dump( $actual_remaining_amount_after_payment === $remaining_amount_after_payment ); // return TRUE

瞧!

acual您的變量“ $ remaining_amount_after_payment”不是真正的212.4

使用var_export來確定其值。 就我而言,您應該將浮點值“四舍五入”到精度。 四舍五入(x,精度)進行比較

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM