php如何比較兩個浮點(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)這個問題是因?yàn)楦↑c(diǎn)數(shù)計(jì)算涉及精度。
關(guān)于php里面的浮點(diǎn)數(shù), 官方手冊 上有相關(guān)解釋
看官方手冊里面關(guān)于浮點(diǎn)數(shù)的提示,如下圖所示。里面提到 永遠(yuǎn)不要比較兩個浮點(diǎn)數(shù)是否相等
那么有什么辦法可以比較兩個浮點(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í)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
解析smarty 截取字符串函數(shù) truncate的用法介紹
本篇文章是對smarty 截取字符串函數(shù) truncate的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php 多進(jìn)程編程父進(jìn)程的阻塞與非阻塞實(shí)例分析
這篇文章主要介紹了php 多進(jìn)程編程父進(jìn)程的阻塞與非阻塞,結(jié)合實(shí)例形式分析了php 多進(jìn)程編程中父進(jìn)程的阻塞、等待、子進(jìn)程退出、非阻塞等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
PHP 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-12
PHP函數(shù)func_num_args用法實(shí)例分析
這篇文章主要介紹了PHP函數(shù)func_num_args用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了func_num_args函數(shù)返回函數(shù)參數(shù)的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-12-12
How 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ù)組詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03

