Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数学字符串转换为科学符号_Php - Fatal编程技术网

Php 将数学字符串转换为科学符号

Php 将数学字符串转换为科学符号,php,Php,我使用bc数学()。 该值为,例如 $value = "0.0000000000000000000001111111111111111111112"; 我怎样才能把它转换成科学符号呢。应该是这样的: $value = "1.111111111111111111112E-22"; 我和其他人一起试过 sprintf("%E",$value) or a (float) 但结果只是 1.111111E-22 (sprintf) 这不是应有的那么多有效数字:(数一数有多少个零 请注意,因为您使用

我使用bc数学()。 该值为,例如

$value = "0.0000000000000000000001111111111111111111112";
我怎样才能把它转换成科学符号呢。应该是这样的:

$value = "1.111111111111111111112E-22";
我和其他人一起试过

sprintf("%E",$value) or a (float)
但结果只是

1.111111E-22 (sprintf)

这不是应有的那么多有效数字:(

数一数有多少个零

请注意,因为您使用的是大数字,所以必须将它们作为字符串处理。因此

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
if(预匹配(“/^0.0*/”,$value,$m)){
$zeroes=strlen($m[0]);
$value=substr($value,$zero,1)
.rtrim(“.substr($value,$zeroes+1),“0.”)
“E-”($0-1);
}
elseif(预匹配(“/(\d+)(:\(\d+)))/”,$value,$m)){
$zeroes=strlen($m[1]);
$value=substr($value,0,1)
.rtrim(“.substr($m[1],1)。$m[2],“0.”)
“E+”($0-1);
}
//其他1 1E+6
  • 1234.5678=>1.2345678E+3
  • 0.9=>9E-1
  • 0.123=>1.23E-1
  • 0.00000011122222=>1.1111122222E-7

  • 您可以执行
    $float\u value=(float)$value;
    和get
    1.1111111 E-22
    ,但除此之外,
    float
    不能提供更高的精度,因此它不能在末尾显示
    2

    除了PHPs double不能保留超过15个有效数字之外,您可能会通过
    printf
    被削减来询问精度。使用
    printf(“%.16E”,$value);
    得到一个稍长的科学数字。你好,马里奥,tnx 1.1111111111E-22//16 1.111111111111111062E-22//20,但不完全是tnx mike,但正如我所说的,“a(float)”的数字太小了,它起作用了——但不完全是——我的“a(float)”在你的答案之前(因为它已经出现在我的问题的第一个版本中:-P-我只是把“sprint”改成了“sprintf”;)然而-tnx:)tnx niet:)因为-我认为-最好的答案:)