2011-03-17 19 views
7

Supongamos que tengo una cadena que contiene "7.2769482308e + 01" (este número proviene del software de terceros, no puedo controlar el formato).Convertir el número exponencial presentado como una cadena a un decimal

¿Cuál es la forma más económica de convertirlo en decimal 72.769482308?

La única solución que se me ocurre es dividir la parte decimal + exponencial y usar la multiplicación. ¿Pero puede haber alguna función construida para hacer lo mismo?

NOTA: Chicos, sí, he leído Convert exponential to a whole number in PHP y Convert exponential number to decimal in php. Y esas preguntas son irrelevantes, ya que ya tienen un número, pero tengo una cadena de .

Respuesta

13

¿Qué tal un simple lanzamiento a un valor de flotación?

$string = "7.2769482308e+01"; 
$float = (float) $string; 
+0

Lol, sorprendentemente simple ... Nunca se sabe que PHP puede reconocer el formato exponencial cadena en la fundición. ¿Este comportamiento está documentado? – zerkms

+1

@zerkms Sí. http://php.net/manual/en/language.types.string.php#language.types.string.conversion y http://php.net/manual/en/language.types.float.php – Wiseguy

+0

Sí, existe algo en la documentación: http://ru.php.net/manual/en/language.types.string.php#language.types.string.conversion – zerkms

5

que tuvieron éxito en el uso number_format(1.2378147769392E+14, 0, '', '') que fue originalmente suministrados por this question.

Esto también funciona cuando el valor es una cadena, como el siguiente: number_format("1.2378147769392E+14", 0, '', ''). Adelante, pruébalo.

+0

No es una respuesta. Tengo una ** cadena ** (por eso lo enfaticé), por favor, lea la pregunta atenta una vez más. Por favor, elimínelo o lo rechazaré – zerkms

+3

Ouch, palabras duras ... ¿Lo ha intentado? Porque esto funciona tanto cuando el valor es y no es una cadena. – jwhat

+0

cualquier razón para permitir una solución que sea casi dos veces más corta y más legible: '(float) $ string'? PD: no son duras, no fue una respuesta en su edición inicial PPS: 'number_format' acepta el número como primer argumento, por lo que la cadena se convierte implícitamente en PPPS: el resultado es una cadena, por lo que debe realizarse otra conversión. realizado para obtener el decimal/flotante – zerkms

0

Aquí está una muy barato uno: $float = "7.2769482308e+01" + 0;

Cuestiones relacionadas