解决PHP高精度计算问题

$a = 0.58;

var_dump(intval($a * 100));

WTF!输出了57 ???好吧,别的不说,直接上解决办法

解决办法1:

$a = 0.58;
var_dump(intval(round($a * 100)))

不够高级呀!!!
来来来~~~

解决办法2:

$a = 0.58;
var_dump(bcmul($a, 100, 0));

PHP bc函数拓展:

转载自:https://blog.csdn.net/phpfenghuo/article/details/46369569 谢谢

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


 ***************************************************************************************  
 *两个高精度数比较  
 *工作中遇到一种情况,0.00 != 0  
 *int bccomp ( string $left_operand , string $right_operand [, int $scale ] )  
 *$left=$right 返回 0  
 *$left<$right 返回 -1  
 *$left>$right 返回 1  
 *$scale 小数点位数  
 ***************************************************************************************  
$a = 4.45;  
$b = 5.54;  
if(bccomp($a, $b, 2) == 0)  
{  

}  

 ***************************************************************************************  
 *两个高精度数相加  
 *string bcadd ( string $left_operand , string $right_operand [, int $scale ] )  
 *$scale 返回的小数点个数  
 ***************************************************************************************  
$a = 1.0321456;  
$b = 0.0123456;  
$c = bcadd($a, $b, 2);  
//var_dump($c);  

 ***************************************************************************************  
 *两个高精度数相减  
 *sstring bcsub ( string $left_operand , string $right_operand [, int $scale ] )  
 *$scale 返回的小数点个数  
 ***************************************************************************************  
$a = 1.0321456;  
$b = 3.0123456;  
$c = bcsub($a, $b, 2);  
var_dump($c);  



 ********************************************************  
 *两个高精度数求余/取模  
 *string bcmod ( string $left_operand , string $modulus )  
  *******************************************************  
$a = 6;  
$b = 4;  
$c = bcmod($a, $b);  

//var_dump($c);  

 ***************************************************************************************  
 *两个高精度数相除  
 *string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )  
 *$scale小数点位数默认为 0  
 ***************************************************************************************  
 $a = 6;  
 $b = 5;  
 $c = bcdiv($a, $b, 3);  
 //var_dump($c);  

 ***************************************************************************************  
 *两个高精度数相乘  
 *string bcmul ( string $left_operand , string $right_operand [, int $scale ] )  
 *$scale小数点位数默认为 0  
 ***************************************************************************************  
$a = 3.1415926;  
$b = 2.4569874566;  
$c = bcmul($a, $b, 6);  
//var_dump($c);  

 ***************************************************************************************  
 *两个高精度数的次方值  
 *string bcpow ( string $left_operand , string $right_operand [, int $scale ] )  
 *$scale小数点位数默认为 0  
 ***************************************************************************************  
$a = 3.1415926;  
$b = 2;  
$c = bcpow($a, $b, 3);  
//var_dump($c);  

 **************************************************  
 *求高精度数的平方根  
 *string bcsqrt ( string $operand [, int $scale ] )  
 *$scale小数点位数默认为 0  
 ***************************************************  
$b = bcsqrt($a, 6);  
//var_dump($b);  

 ******************************  
 *设置bc函数的小数点位数  
 *bool bcscale ( int $scale )  
 *$scale小数点位数默认为 0  
 ******************************  
//bcscale();  
?>   

猜你喜欢

转载自blog.csdn.net/liuboxx1/article/details/80497688