Pregunta

Necesito ayuda para la conversión de una cadena que contiene un número en notación científica a un doble.

Ejemplo cadenas: "1.8281e-009" "2.3562e-007" "0.911348"

Estaba pensando en romper simplemente el número en el número de la izquierda y el exponente y que simplemente hacer los cálculos para generar el número; pero hay una manera mejor / estándar de hacer esto?

¿Fue útil?

Solución

PHP es typeless tipos dinámicos, lo que significa que tiene que analizar valores para determinar sus tipos (versiones recientes de PHP Tienes declaraciones de tipo ).

En su caso, usted puede simplemente realizar una operación numérica para obligar a PHP para considerar los valores como números (y se entiende la x.yE-z notación científica).

Trate por ejemplo

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

simplemente añadiendo 1 (también se puede restar cero) hará que las cadenas se convierten en números, con la cantidad correcta de decimales.

Resultados:

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

También podría emitir el resultado utilizando (float)

  $real = (float) "3.141592e-007";

Otros consejos

$f = (float) "1.8281e-009";
var_dump($f); // float(1.8281E-9)
$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,'.');
}

He encontrado un puesto que Number_format utiliza para convertir el valor de un número flotante notación científica a una serie de notación no científico:

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

Nota del editor: Enlace está podrido

Ejemplo del poste:

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

HTH

Tras línea de código puede ayudar a visualizar el valor BIGINT,

$token=  sprintf("%.0f",$scienticNotationNum );

enlace .

Uso number_format() y funciones rtrim() juntos. Por ejemplo,

//eg $sciNotation = 2.3649E-8
$number = number_format($sciNotation, 10); //Use $dec_point large enough
echo rtrim($number, '0'); //Remove trailing zeros

I creó una función, con más funciones (juego de palabras no se pretende)

function decimalNotation($num){
    $parts = explode('E', $num);
    if(count($parts) != 2){
        return $num;
    }
    $exp = abs(end($parts)) + 3;
    $decimal = number_format($num, $exp);
    $decimal = rtrim($decimal, '0');
    return rtrim($decimal, '.');
}
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;
        }
    }

trabajo con ,000077240388

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top