BC数学字符串成科学记数法

时间:2015-08-15 16:02:00

标签: php

我使用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)

这不是那么多有意义的数字:(

2 个答案:

答案 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

测试用例:

  • 1000000 =&gt; 1E + 6
  • 1234.5678 =&gt; 1.2345678E + 3
  • 0.9 =&gt; 9E-1
  • 0.123 =&gt; 1.23E-1
  • 0.00000011111122222 =&gt; 1.1111122222E-7

答案 1 :(得分:0)

您可以执行$float_value = (float)$value;并获取1.1111111111111E-22但除此之外,float无法提供更高的精确度,因此它无法在结尾显示2。< / p>