Dom Oct 19, 2008 3:02 pm
|
 |
fetiche
Perlero Nuevo

|
Registrado: 19 Oct 2008
Mensajes: 2
|
|
| Conversion números científicos en decimales |
|
|
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. |
|
|
|

Dom Oct 19, 2008 3:54 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
|
|
|
|
|
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 |
|
|

Lun Oct 20, 2008 7:38 am
|
 |
fetiche
Perlero Nuevo

|
Registrado: 19 Oct 2008
Mensajes: 2
|
|
|
|
|
Hola:
Muchas gracias. Con esta contestacion queda resuelto mi problema.
Un saludo. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|