Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Conversion números científicos en decimales

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Dom Oct 19, 2008 3:02 pm
fetiche
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Oct 2008
Mensajes: 2
Conversion números científicos en decimales Responder citando

Hola.
Soy bastante novato en este lenguaje, y os estaría muy agradecido si pudieseis echarme una mano en estos dos problemas que tengo...
1. Necesito convertir un número científico en un entero sin decimales. No sé si existe alguna función para ello.
Los números son del siguiente formato: 1.0030506e+002 y necesito que quede así: 100.30506. ¿Cómo puedo hacerlo?
2. Una vez convertido en decimal, necesito eliminar los decimales y dejarlo de esta manera: 100.

Quizá sea fácil, pero me he atascado.
Muchas gracias por anticipado.
Mensaje Dom Oct 19, 2008 3:54 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, fetiche.

No te olvides de mostrar tu código para que veamos dónde pueden estar los errores.

En cuanto a lo que propones, depende un poco del tamaño de la parte entera. Por ejemplo, si es pequeña, como en el ejemplo, no tienes que hacer nada...

Perl:
my $numero_cientifico = '1.0030506e+002';
print "$numero_cientifico"# 1.0030506e+002
print 0+$numero_cientifico# 100.30506


pero si el exponente se hace más grande (entre 14 y 16), entonces siempre sale en notación científica.

Puedes usar la función sprintf() para formatear los números, sobre todo si sabes cómo son esos exponentes.

Perl:
my $numero_cientifico = '1.0030506e+015';
printf "%.25g\n", $numero_cientifico; # 1003050600000000


Otra opción es interpretar el propio número, para extraer el exponente y así calcular el valor en printf.

O usar el módulo bigint:
Código:
explorer@portatil:~/Documents/Desarrollo> perl -Mbignum -le 'print 1.0030506e+002'
100.30506
explorer@portatil:~/Documents/Desarrollo> perl -Mbignum -le 'print 123456789e+45'
123456789000000000000000000000000000000000000000000000


Todo esto en cuanto a notación... pero teniendo en cuenta el segundo punto de tu cuestión, no necesitas nada más que usar la función int().
Código:
explorer@portatil:~/Documents/Desarrollo> perl -le 'print int(1.0030506e+002)'
100
Mensaje Lun Oct 20, 2008 7:38 am
fetiche
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Oct 2008
Mensajes: 2
Responder citando

Hola:
Muchas gracias. Con esta contestacion queda resuelto mi problema.
Un saludo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group