php如何比較兩個(gè)浮點(diǎn)數(shù)是否相等詳解
前言
本文主要給大家介紹了關(guān)于利用php如何比較浮點(diǎn)數(shù)是否相等的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
看下面這段代碼, 0.9+0.1 的相加結(jié)果與 1 進(jìn)行比較
<?php
$a = 0.9;
$b = 0.1;
$total = $a + $b;
var_dump($total);
if (1 == $total) {
echo "true";
} else {
echo "false";
}
echo "\n";
if (1.0 == $total) {
echo "true";
} else {
echo "false";
}
?>
打印結(jié)果是:
float(1)
true
true
再看下面這段代碼, 0.6+0.1+0.1+0.1+0.1 的相加結(jié)果與 1 進(jìn)行比較
<?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";
}
?>
打印結(jié)果是:
float(1)
false
false
為什么這兩段代碼結(jié)果不一樣?把兩段代碼里面的 $total 分別以精度20位的形式打印出來(lái) printf("%.20f\n", $total); ,結(jié)果如下:
1.00000000000000000000
0.99999999999999988898
出現(xiàn)這個(gè)問(wèn)題是因?yàn)楦↑c(diǎn)數(shù)計(jì)算涉及精度。
關(guān)于php里面的浮點(diǎn)數(shù), 官方手冊(cè) 上有相關(guān)解釋
看官方手冊(cè)里面關(guān)于浮點(diǎn)數(shù)的提示,如下圖所示。里面提到 永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等
那么有什么辦法可以比較兩個(gè)浮點(diǎn)數(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";
}
?>
結(jié)果輸出為:
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";
}
?>
結(jié)果輸出為:
true
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- php判斷兩個(gè)浮點(diǎn)數(shù)是否相等的方法
- 簡(jiǎn)單談?wù)刾hp浮點(diǎn)數(shù)精確運(yùn)算
- PHP中兩個(gè)float(浮點(diǎn)數(shù))比較實(shí)例分析
- PHP中浮點(diǎn)數(shù)計(jì)算比較及取整不準(zhǔn)確的解決方法
- PHP浮點(diǎn)數(shù)精度問(wèn)題匯總
- PHP數(shù)據(jù)類(lèi)型之整數(shù)類(lèi)型、浮點(diǎn)數(shù)的介紹
- PHP浮點(diǎn)數(shù)的一個(gè)常見(jiàn)問(wèn)題
- php的sprintf函數(shù)的用法 控制浮點(diǎn)數(shù)格式
- php 浮點(diǎn)數(shù)比較方法詳解
相關(guān)文章
PHP操作MongoDB時(shí)的整數(shù)問(wèn)題及對(duì)策說(shuō)明
本文所說(shuō)的整數(shù)問(wèn)題,其實(shí)并不是MongoDB的問(wèn)題,而是PHP驅(qū)動(dòng)的問(wèn)題2011-05-05
php實(shí)現(xiàn)從上傳文件創(chuàng)建縮略圖的方法
這篇文章主要介紹了php實(shí)現(xiàn)從上傳文件創(chuàng)建縮略圖的方法,涉及php操作上傳文件及圖片操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
PHP實(shí)現(xiàn)的二分查找算法實(shí)例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)的二分查找算法,結(jié)合實(shí)例形式分析了二分查找算法的原理與循環(huán)、遞歸等實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
基于php中echo用逗號(hào)和用點(diǎn)號(hào)的區(qū)別詳解
下面小編就為大家分享一篇基于php中echo用逗號(hào)和用點(diǎn)號(hào)的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽示例
這篇文章主要介紹了php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽的方法,結(jié)合實(shí)例形式分析了php針對(duì)字符串的編碼轉(zhuǎn)換與正則替換操作技巧,需要的朋友可以參考下2016-09-09

