php比較浮點數

2021-09-25 02:02:10 字數 649 閱讀 1551

php手冊中有一句話,永遠不要比較兩個浮點數是否相等,但是在實際情況中,有時候還是會涉及到關於浮點數的運算和比較,當出現這種情況下,請使用bc math擴充套件函式或者gmp 函式。

我們來看一種常見的情況:

<?php

$a = 1.3;

$b = 1.2;

$c = 0.1;

$d = $a - $b;

if ($d == $c) else

printf("%.20f

", $d);

按正常的思維,1.3-1.2等於0.1,相比較應該是相等的,但實際上比較的確實不相等的,因為浮點數的精度有限,運算會出現誤差,實際結果$d ,我們可以使用格式化輸出,你就會發現,$d 實際上表示成了 0.10000000000000008882,所以不要比較浮點數,如果需要,我們可以使用的下面的方法實現:

<?php

$a = 1.3;

$b = 1.2;

$c = 0.1;

$d = $a - $b;

if (bccomp($d, $c, 1) === 0) else

bc math擴充套件提供了多個函式可以幫我們實現各種函式,詳情可以參閱手冊:

php 浮點數比較方法

首先看乙個例子 a 0.1 b 0.9 c 1 var dump a b c var dump c b a a b c 返回true,正確 c b a 返回false,錯誤 為什麼會這樣呢?運算後,精度為20位時實際返回的內容如下 a 0.1 b 0.9 c 1 printf 20f a b 1.0...

PHP浮點數比較不准

首先看一段 a 0.1 b 0.7 var dump a b 0.8 列印出來的值居然為 boolean false 這是為啥?php手冊對於浮點數有以下警告資訊 warning 浮點數精度 顯然簡單的十進位制分數如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉換為內部二進位制的格式。這就...

浮點數比較

在數 算當中經常會涉及到判斷兩個數是否相等的情況 對於整數很好處理 a b這樣的乙個語句就可以解決全部的問題 但是對於浮點數是不同的 首先,浮點數在計算機當中的二進位制表達方式就決定了大多數浮點數都是無法精確的表達的 現在的計算機大部分都是數字計算機,不是模擬機,數字機的離散化的資料表示方法自然無法...