php浮点数计算问题

巴扎黑
Freigeben: 2016-11-22 11:06:58
Original
1532 Leute haben es durchsucht

如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug

,是跨语言的,我用python也遇到这个问题。所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面介绍一下一些常用的BC高精确度函数使用。

 

php BC高精确度函数库包含了:相加,比较,相除,相减,求余,相乘,n次方,配置默认小数点数目,求平方。这些函数在涉及到有关金钱计算时比较有用,比如电商的价格计算。

 

 

/**

  * 两个高精度数比较

  * 

  * @access global

  * @param float $left

  * @param float $right

  * @param int $scale 精确到的小数点位数

  * 

  * @return int $left==$right 返回 0 | $left<$right 返回 -1 | $left>$right 返回 1

  */

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

// -1

  

 /**

  * 两个高精度数相加

  * 

  * @access global

  * @param float $left

  * @param float $right

  * @param int $scale 精确到的小数点位数

  * 

  * @return string 

  */

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

//1.04

 

  /**

  * 两个高精度数相减

  * 

  * @access global

  * @param float $left

  * @param float $right

  * @param int $scale 精确到的小数点位数

  * 

  * @return string 

  */

var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));

//-1.98

  

 /**

  * 两个高精度数相除

  * 

  * @access global

  * @param float $left

  * @param float $right

  * @param int $scale 精确到的小数点位数

  * 

  * @return string 

  */

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

//1.20

 

 /**

  * 两个高精度数相乘

  * 

  * @access global

  * @param float $left

  * @param float $right

  * @param int $scale 精确到的小数点位数

  * 

  * @return string 

  */

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

//7.71

 

 /**

  * 设置bc函数的小数点位数

  * 

  * @access global

  * @param int $scale 精确到的小数点位数

  * 

  * @return void 

  */ 

bcscale(3);

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

// 16.007

 

注意点:关于设置的位数,超出部分是丢弃掉,而不是四舍五入


Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!