我使用bc数学(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)
这不是那么多重要的数字,应该是:
发布于 2015-08-15 08:15:04
数一下有多少个零。
请注意,因为您使用的是大数字,所以您必须将它们作为字符串处理。所以..。
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
测试用例:
发布于 2015-08-15 08:16:50
您可以执行$float_value = (float)$value;
并获得1.1111111111111E-22
,但除此之外,float
不能提供更高的精度,因此不能在最后显示2
。
https://stackoverflow.com/questions/32026553
复制