php如何比較兩個(gè)浮點(diǎn)數(shù)是否相等詳解
前言
本文主要給大家介紹了關(guān)于利用php如何比較浮點(diǎn)數(shù)是否相等的相關(guān)內(nè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位的形式打印出來 printf("%.20f\n", $total); ,結(jié)果如下:
1.00000000000000000000
0.99999999999999988898
出現(xiàn)這個(gè)問題是因?yàn)楦↑c(diǎn)數(shù)計(jì)算涉及精度。
關(guān)于php里面的浮點(diǎn)數(shù), 官方手冊 上有相關(guān)解釋
看官方手冊里面關(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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- php判斷兩個(gè)浮點(diǎn)數(shù)是否相等的方法
- 簡單談?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ù)精度問題匯總
- PHP數(shù)據(jù)類型之整數(shù)類型、浮點(diǎn)數(shù)的介紹
- PHP浮點(diǎn)數(shù)的一個(gè)常見問題
- php的sprintf函數(shù)的用法 控制浮點(diǎn)數(shù)格式
- php 浮點(diǎn)數(shù)比較方法詳解
相關(guān)文章
解析smarty 截取字符串函數(shù) truncate的用法介紹
本篇文章是對smarty 截取字符串函數(shù) truncate的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php 多進(jìn)程編程父進(jìn)程的阻塞與非阻塞實(shí)例分析
這篇文章主要介紹了php 多進(jìn)程編程父進(jìn)程的阻塞與非阻塞,結(jié)合實(shí)例形式分析了php 多進(jìn)程編程中父進(jìn)程的阻塞、等待、子進(jìn)程退出、非阻塞等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02PHP spl_autoload_register實(shí)現(xiàn)自動加載研究
spl_autoload_register()函數(shù)應(yīng)該是主流框架使用最多的也是非常核心的函數(shù)之一,可實(shí)現(xiàn)自動注冊函數(shù)和類,實(shí)現(xiàn)類似__autoload() 函數(shù)功能,簡化了類的調(diào)用與加載,提高了工作的效率2011-12-12PHP函數(shù)func_num_args用法實(shí)例分析
這篇文章主要介紹了PHP函數(shù)func_num_args用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了func_num_args函數(shù)返回函數(shù)參數(shù)的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12How do I change MySQL timezone?
The MySQL timezone is set to MST (-7 hours GMT/UTC) and is not configurable by you. MySQL is only capable of having 1 timezone setting per mysql daemon. Therefore, you cannot select NOW() and expect a result in a timezone other than MST.2008-03-03基于php數(shù)組中的索引數(shù)組和關(guān)聯(lián)數(shù)組詳解
下面小編就為大家分享一篇基于php數(shù)組中的索引數(shù)組和關(guān)聯(lián)數(shù)組詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03