首頁  >  文章  >  後端開發  >  php浮點數計算問題

php浮點數計算問題

巴扎黑
巴扎黑原創
2016-11-22 11:06:581533瀏覽

如果用php的+-*/計算浮點數的時候,可能會遇到一些計算結果錯誤的問題,例如echo intval( 0.58*100 );會列印57,而不是58,這個其實是電腦底層二進位無法精確表示浮點數的一個bug

,是跨語言的,我用python也遇到這個問題。所以基本上大部分語言都提供了精確運算的類別庫或函數函式庫,像是php有BC高精確度函數函式庫,下面介紹一下一些常用的BC高精確度函數使用。

 

php BC高精確度函數庫包含了:相加,比較,相除,相減,求餘,相乘,n次方,配置預設小數點數目,求平方。這些函數在涉及到有關金錢計算時比較有用,例如電商的價格計算。

 

 

/**

  * 兩個高精準度數比較

  * 

  * @access global

  * @param float $left

值 *param fm f5 fp. * 

  * @return int $left==$right 回傳0 | $left$right 回傳1

 */

var_dump(bccomp($left=4.45, $right=5.54, 2));

*/

var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));

//1.04

 

/1.04

 

6, $right=3.0123456, 2));

//-1.98

  

 /**

  * 兩個高精準度數相加

  * 

  * @access global

  * @param float $left

.

  * 

  * @return string 

 */

var_dump(bcdiv($left=6, $right)=5,

/1.20

 

 /**

  * 兩個高精準度數相減

  * 

  * @access global

  * @param float $left

) @param

  * 

  * @return string 

 */

var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2)); &* / 

bcscale(3);

var_dump(bcdiv('105', '6.55957')); 

// 16.007

// 16.007

 

// 16.007

四捨五入

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn