簡體   English   中英

比較兩個相同的十進制數,但得出錯誤的結果

[英]Comparing 2 Same Decimal Numbers But Gives Wrong Result

我有這個如果條件:

if ($dc_real_vol != $dc_sum_vol) {
    echo '||+++ REAL VOL ' . $dc_real_vol . PHP_EOL;
    echo '||+++ SUM VOL ' . $dc_sum_vol . PHP_EOL;
    echo '||+++ THIS TRADE IS DAMAGE ' . PHP_EOL;
}

當我檢查輸出時:

||+++ REAL VOL 0.60533000
||+++ SUM VOL 0.60533
||+++ THIS TRADE IS DAMAGE 

為什么PHP認為0.605330000.60533不同? 如何將此條件標記為“真”?

更新:

我在下面嘗試了Loek的解決方案,並且這樣更改了代碼:

$dc_real_vol = (float) $dc_real_vol;
$dc_sum_vol = (float) $dc_sum_vol;

echo '||*** REAL VOL ' . $dc_real_vol . PHP_EOL;
echo '||*** SUM VOL ' . $dc_sum_vol . PHP_EOL;

if ($dc_real_vol !== $dc_sum_vol) {

    var_dump($dc_real_vol);
    var_dump($dc_sum_vol);

    echo '||+++ THIS TRADE IS DAMAGE ' . PHP_EOL;
}

結果如下:

||*** REAL VOL 0.60533
||*** SUM VOL 0.60533
float(0.60533)
float(0.60533)
||+++ THIS TRADE IS DAMAGE 

為什么相同的數字,相同的類型但PHP仍然識別為不同的東西?

我真的無法解釋為什么PHP認為數字不同,我只知道它們實際上在字節級別上不同的。

我能想到的最簡單的方法是將兩個數字都轉換為浮點數,然后像往常一樣繼續進行操作: https : //3v4l.org/uQdAP

// Note we can even use !== instead of != now
if ((float) $dc_real_vol !== (float) $dc_sum_vol) {
    echo '||+++ REAL VOL ' . $dc_real_vol . PHP_EOL;
    echo '||+++ SUM VOL ' . $dc_sum_vol . PHP_EOL;
    echo '||+++ THIS TRADE IS DAMAGE ' . PHP_EOL;
}

在比較之前格式化數字。

$dc_real_vol = number_format($dc_real_vol, 9);
$dc_sum_vol = number_format($dc_sum_vol, 9);

您的比較不起作用的實際原因是,您很可能將這些變量分配為strings PHP是弱類型。 您可以通過在與var_dump比較之前檢查變量來驗證這一點。 PHP最有可能會報告它已將您的變量鍵入為字符串。 在這種情況下,您應該利用number_format進行正確比較。

暫無
暫無

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

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