我使用bc math(http://php.net/manual/en/book.bc.php)。 该值例如是
$value = "0.0000000000000000000001111111111111111111112";
我怎样才能将其转化为科学记数法。它应该是这样的:
$value = "1.111111111111111111112E-22";
我和其他人一起试过
sprintf("%E",$value) or a (float)
但结果只是
1.111111E-22 (sprintf)
这不是那么多有意义的数字:(
答案 0 :(得分:1)
计算有多少个零。
请注意,因为您使用大数字,所以必须将它们作为字符串处理。所以......
if( preg_match("/^0\.0*/",$value,$m)) {
$zeroes = strlen($m[0]);
$value = substr($value,$zeroes,1)
.rtrim(".".substr($value,$zeroes+1),"0.")
."E-".($zeroes-1);
}
elseif( preg_match("/(\d+)(?:\.(\d+))?/",$value,$m)) {
$zeroes = strlen($m[1]);
$value = substr($value,0,1)
.rtrim(".".substr($m[1],1).$m[2],"0.")
."E+".($zeroes-1);
}
// else 1 <= number < 10, so no transformation needed
测试用例:
答案 1 :(得分:0)
您可以执行$float_value = (float)$value;
并获取1.1111111111111E-22
但除此之外,float
无法提供更高的精确度,因此它无法在结尾显示2
。< / p>