<?php
$a = 1222222222122222222212222222221222222222122222222212222222221222222222122222222212222222221222222222;
$b= 3333333331333333333133333333313333333331333333333133333333313333333331333333333133333333313333333331;
$a = numToStr($a);// sprintf("%s",$a);//(string)$a;
$b =numToStr($b);
echo "<pre>";
print_r(bb(aa((string)$a,(string)$b)));
function bb($data){
$string="0";
foreach ($data as $k=>$v){
$string = bcadd($string,$v);
}
return $string;
}
function aa($a,$b){
$len= strlen($b);
$data=[];
for($i=$len-1;$i>=0;$i--){
$data[]=bcmul($a,$b[$i]).str_repeat(0,$len-1-$i);
}
return $data;
}
function numToStr($num)
{
$result = "";
if (stripos($num, 'E') === false) {
return $num;
}
while ($num > 0) {
$v = $num - floor($num / 10) * 10;
$num = floor($num / 10);
$result = $v . $result;
}
return $result;
}
php.ini 里 precision=14 默认值 需要改大点
php解决方案(精度上会有丢失)
思路上大致就是这么做的:计算机精度最大在64位 所以最后转化为字符串去相乘,把$a看成一个整体,$b拆成一个一个的数去相乘$a,末尾补0。最后在把这些数相加!