• Publicidad

Conversion números científicos en decimales

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Conversion números científicos en decimales

Notapor fetiche » 2008-10-19 16:02 @709

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.
fetiche
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-10-19 15:43 @697

Publicidad

Notapor explorer » 2008-10-19 16:54 @745

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...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $numero_cientifico = '1.0030506e+002';
print "$numero_cientifico";  # 1.0030506e+002
print 0+$numero_cientifico;  # 100.30506
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $numero_cientifico = '1.0030506e+015';
printf "%.25g\n", $numero_cientifico; # 1003050600000000
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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: Seleccionar todo
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: Seleccionar todo
explorer@portatil:~/Documents/Desarrollo> perl -le 'print int(1.0030506e+002)'
100
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fetiche » 2008-10-20 08:38 @401

Hola:
Muchas gracias. Con esta contestacion queda resuelto mi problema.
Un saludo.
fetiche
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-10-19 15:43 @697


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados