Question

J'ai besoin d'aide pour convertir une chaîne qui contient un nombre en notation scientifique à un double.

chaînes Exemple: "1.8281e-009" "2.3562e-007" "0.911348"

Je pensais à tout rompre le numéro dans le numéro sur la gauche et l'exposant et que juste faire le calcul pour générer le nombre; mais est-il une meilleure / moyen standard pour le faire?

Était-ce utile?

La solution

PHP est sans type typé dynamiquement, ce qui signifie qu'il doit analyser les valeurs pour déterminer leurs types (les versions récentes de PHP ont déclarations de type ).

Dans votre cas, vous pouvez simplement effectuer une opération numérique pour forcer PHP à prendre en compte les valeurs que le nombre (et il comprend la notation scientifique x.yE-z).

Essayez par exemple

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

juste ajouter 1 (vous pouvez également soustraire zéro) définirons les chaînes deviennent des nombres, avec la bonne quantité de décimales.

Résultat:

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

Vous pourriez aussi jeter le résultat en utilisant (float)

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

Autres conseils

$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,'.');
}

J'ai trouvé un poste qui number_format utilisé pour convertir la valeur à partir d'un numéro de notation scientifique flottante à un certain nombre de notation non-scientifique:

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

  

Note de l'éditeur: Lien est pourri

Exemple de la publication:

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

HTH

Après ligne de code peut vous aider à afficher la valeur bigint,

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

consulter ce lien .

Utiliser les fonctions number_format() et rtrim() ensemble. Par exemple,

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

I créé une fonction, avec plus de fonctions (jeu de mots n'a pas pour but)

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;
        }
    }

travail avec ,000077240388

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top