成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

php中浮點數(shù)比較的示例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關php中浮點數(shù)比較的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、雅安服務器托管、營銷軟件、網(wǎng)站建設、色尼網(wǎng)站維護、網(wǎng)站推廣。

浮點數(shù)運算精度問題

首先看一個例子:

<?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位時實際返回的內(nèi)容如下:

<?php
$a = 0.1;
$b = 0.9;
$c = 1;
printf("%.20f", $a+$b); // 1.00000000000000000000
printf("%.20f", $c-$b); // 0.09999999999999997780
?>

$c-$b 為 0.09999999999999997780,因此與0.1比較返回false

出現(xiàn)這個問題是因為浮點數(shù)計算涉及精度,當浮點數(shù)轉為二進制時有可能會造成精度丟失。

浮點數(shù)轉二進制方法

整數(shù)部分采用除以2取余方法

小數(shù)部分采用乘以2取整方法

例如:把數(shù)字8.5轉為二進制

整數(shù)部分是8

8/2=4 8%2=0
4/2=2 4%2=0
2/2=1 2%2=0

1比2小,因此不需要計算下去,整數(shù)8的二進制為 1000

小數(shù)部分是0.5

0.5x2 = 1.0

因取整后小數(shù)部分為0,因此不需要再計算下去

小數(shù)0.5的二進制為 0.1

8.5的二進制為1000.1

計算數(shù)字0.9的二進制

0.9x2=1.8
0.8x2=1.6
0.6x2=1.2
0.2x2=0.4
0.4x2=0.8
0.8x2=1.6

…. 之后不斷循環(huán)下去,當截取精度為N時,N后的數(shù)會被舍去,導致精度丟失。

上例中0.9在轉為二進制時精度丟失,導致比較時出現(xiàn)錯誤。

所以永遠不要相信浮點數(shù)已精確到最后一位,也永遠不要比較兩個浮點數(shù)是否相等。

正確比較浮點數(shù)的方法

1.使用round方法處理后再比較

例子:

<?php
$a = 0.1;
$b = 0.9;
$c = 1;
var_dump(($c-$b)==$a);          // false
var_dump(round(($c-$b),1)==round($a,1)); // true
?>

2.使用高精度運算方法

首先進行運算時,使用高精度的運算方法,這樣可以保證精度不丟失。

高精度運算的方法如下:

bcadd將兩個高精度數(shù)字相加

bccomp比較兩個高精度數(shù)字,返回-1,0,1

bcdiv 將兩個高精度數(shù)字相除

bcmod 求高精度數(shù)字余數(shù)

bcmul 將兩個高精度數(shù)字相乘

bcpow 求高精度數(shù)字乘方

bcpowmod 求高精度數(shù)字乘方求模

bcscale 配置默認小數(shù)點位數(shù),相當于Linux bc中的”scale=”

bcsqrt 求高精度數(shù)字平方根

bcsub將兩個高精度數(shù)字相減

例子:

<?php
$a = 0.1;
$b = 0.9;
$c = 1;
var_dump(($c-$b)==$a);     // false
var_dump(bcsub($c, $b, 1)==$a); // true
?>

感謝各位的閱讀!關于“php中浮點數(shù)比較的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

文章名稱:php中浮點數(shù)比較的示例分析-創(chuàng)新互聯(lián)
標題路徑:http://jinyejixie.com/article22/ddsgjc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、電子商務、網(wǎng)站建設軟件開發(fā)、網(wǎng)站設計做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設
枣强县| 策勒县| 岳阳市| 屏山县| 洪洞县| 连江县| 辽阳县| 永年县| 曲阳县| 台北市| 仁怀市| 曲阜市| 南丹县| 天台县| 沙田区| 上林县| 海阳市| 乌鲁木齐县| 衢州市| 南郑县| 文登市| 乌拉特后旗| 榆树市| 内江市| 香港 | 富平县| 曲水县| 五莲县| 历史| 海阳市| 六枝特区| 昆山市| 汕头市| 永宁县| 宣化县| 晋州市| 南投县| 绥棱县| 大连市| 门源| 潼关县|