true
true

再看下面這段代碼, 0.6+0.1+0.1+0.1+0.1 的相加結果與 1 進行比較

<?php
$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;

$total = $a + $b + $c + $d + $e;
var_dump($total);

if (1 == $total) {
 echo "true";
} else {
 echo "false";
}
echo "\n";

if (1.0 == $total) {
 echo "true";
} else {
 echo "false";
}

?>

打印結果是:

float(1)
false
false

為什么這兩段代碼結果不一樣?把兩段代碼里面的 $total 分別以精度20位的形式打印出來 printf(“%.20f\n”, $total); ,結果如下:

1.00000000000000000000
0.99999999999999988898

出現(xiàn)這個問題是因為浮點數(shù)計算涉及精度。

關于php里面的浮點數(shù), 官方手冊上有相關解釋

看官方手冊里面關于浮點數(shù)的提示,里面提到永遠不要比較兩個浮點數(shù)是否相等

那么有什么辦法可以比較兩個浮點數(shù)是否相等呢?

方法一、

看如下代碼示例

<?php

$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;
$epsilon = 0.00001;

$total = $a + $b + $c + $d + $e;

if(abs($total-1) < $epsilon) {
 echo "true";
} else {
 echo "false";
}
echo "\n";

if(abs($total-1.0) < $epsilon) {
 echo "true";
} else {
 echo "false";
}

?>

結果輸出為:

true
true

方法二、

<?php

$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;

$total = $a + $b + $c + $d + $e;

if(1.0 == round($total, 5)) {
 echo "true";
} else {
 echo "false";
}
?>

結果輸出為:

true

贊(0)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-62778877-8306;郵箱:fanjiao@west.cn。本站原創(chuàng)內容未經允許不得轉載,或轉載時需注明出處:西部數(shù)碼知識庫 » php如何比較浮點數(shù)是否相等

登錄

找回密碼

注冊