Convert a string containing a number in scientific notation to a double in PHP

前端 未结 8 1582
伪装坚强ぢ
伪装坚强ぢ 2020-12-25 08:18

I need help converting a string that contains a number in scientific notation to a double.

Example strings: \"1.8281e-009\" \"2.3562e-007\" \"0.911348\"

I wa

相关标签:
8条回答
  • 2020-12-25 08:34

    I tried the +1,-1,/1 solution but that was not sufficient without rounding the number afterwards using round($a,4) or similar

    0 讨论(0)
  • 2020-12-25 08:40

    PHP is typeless dynamically typed, meaning it has to parse values to determine their types (recent versions of PHP have type declarations).

    In your case, you may simply perform a numerical operation to force PHP to consider the values as numbers (and it understands the scientific notation x.yE-z).

    Try for instance

      foreach (array("1.8281e-009","2.3562e-007","0.911348") as $a)
      {
        echo "String $a: Number: " . ($a + 1) . "\n";
      }
    

    just adding 1 (you could also subtract zero) will make the strings become numbers, with the right amount of decimals.

    Result:

      String 1.8281e-009: Number: 1.0000000018281
      String 2.3562e-007: Number: 1.00000023562
      String 0.911348:    Number: 1.911348
    

    You might also cast the result using (float)

      $real = (float) "3.141592e-007";
    
    0 讨论(0)
  • 2020-12-25 08:41
    $f = (float) "1.8281e-009";
    var_dump($f); // float(1.8281E-9)
    
    0 讨论(0)
  • 2020-12-25 08:45
    function decimal_notation($float) {
            $parts = explode('E', $float);
    
            if(count($parts) === 2){
                $exp = abs(end($parts)) + strlen($parts[0]);
                $decimal = number_format($float, $exp);
                return rtrim($decimal, '.0');
            }
            else{
                return $float;
            }
        }
    

    work with 0.000077240388

    0 讨论(0)
  • 2020-12-25 08:49

    I found a post that used number_format to convert the value from a float scientific notation number to a non-scientific notation number:

    http://jetlogs.org/2008/02/05/php-problems-with-big-integers-and-scientific-notation/

    Editor's note: Link is rotten

    Example from the post:

    $big_integer = 1202400000; 
    $formatted_int = number_format($big_integer, 0, '.', ''); 
    echo $formatted_int; //outputs 1202400000 as expected 
    

    HTH

    0 讨论(0)
  • 2020-12-25 08:55
    $float = sprintf('%f', $scientific_notation);
    $integer = sprintf('%d', $scientific_notation);
    if ($float == $integer)
    {
        // this is a whole number, so remove all decimals
        $output = $integer;
    }
    else
    {
        // remove trailing zeroes from the decimal portion
        $output = rtrim($float,'0');
        $output = rtrim($output,'.');
    }
    
    0 讨论(0)
提交回复
热议问题