国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php如何比較兩個浮點數是否相等詳解

2024-05-05 00:06:33
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于利用php如何比較浮點數是否相等的相關內容,下面話不多說了,來一起看看詳細的介紹吧

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

<?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";}?>

打印結果是:

float(1)
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

出現這個問題是因為浮點數計算涉及精度。

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

看官方手冊里面關于浮點數的提示,如下圖所示。里面提到 永遠不要比較兩個浮點數是否相等

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

方法一、

看如下代碼示例

<?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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 曲周县| 上饶市| 汽车| 永平县| 丁青县| 南川市| 金寨县| 南投县| 固始县| 太和县| 南安市| 屯门区| 元朗区| 友谊县| 嘉善县| 鄯善县| 彝良县| 吉隆县| 旺苍县| 长宁区| 庆安县| 抚宁县| 理塘县| 维西| 封开县| 扎赉特旗| 八宿县| 乌拉特前旗| 垣曲县| 中江县| 祥云县| 霸州市| 宁国市| 虹口区| 元谋县| 嵊州市| 汪清县| 开平市| 马公市| 呼伦贝尔市| 永春县|