標籤:比較 php7 浮點型
今天在項目中遇到一個奇怪的問題,經過計算後的double類型的變數的值相等的兩個變數進行比較,結果卻是不相等。
<?php$a=42735.04;$b=17806.2;$c=$a/36;$c=round($c,2);$d=$c*15;echo ‘$b value is: ‘. $b ."\n";echo ‘$d value is: ‘. $d ."\n";if($b == $d){ echo "ok\n";}else{ echo "sorry\n";}
得到結果如,明明兩個變數的值是一樣的,做‘==‘比較運算卻返回false
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/9B/CB/wKioL1lnLTOCGkbJAAAoYDhHs7w497.jpg" style="float:left;" title="php7compare.jpg" alt="wKioL1lnLTOCGkbJAAAoYDhHs7w497.jpg" />
原因是php7中的浮點數 經過 /,*,round()等一系列運算後,精度發生了變化。
解決方案:將任意精度的變數作為字串進行比較。
php7中已經提供較好的解決方案.
(PHP 4, PHP 5, PHP 7)bccomp — 比較兩個任意精度的數字說明int bccomp( string $left_operand, string $right_operand[, int $scale = int ] )把right_operand和left_operand作比較, 並且返回一個整數的結果.
最終使用bccomp()來進行比較解決問題
if(bccomp((string)$b,(string)$d,2) === 0){ echo "yes \n";}else{ echo "no \n";}
本文出自 “我的PHP之路” 部落格,請務必保留此出處http://phpme.blog.51cto.com/663593/1947237
php7采坑記:浮點型資料比較