Convertir una cadena que contiene un número en notación científica a un doble en PHP
-
14-10-2019 - |
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?
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