• Publicidad

Notación científica con formato específico

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

Notación científica con formato específico

Notapor zolidus » 2015-05-18 16:02 @709

Supongamos que tenemos una serie de números como los siguientes:

86.4539
0.0023412
.23442
12.000

¿Existe alguna forma de imprimirlos con un formato de notación científica específica? Por ejemplo:

0.86453900E+02
0.23412000E-02
0.23442000E+00
0.12000000E+02

Ya que si utilizo la función printf ("%.8E" , $var), los números se imprimen como sigue:

8.6453900E+01
2.3412000E-03
2.3442000E-01
1.2000000E+01
zolidus
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2014-01-30 19:45 @864

Publicidad

Re: Notación científica con formato específico

Notapor explorer » 2015-05-18 18:26 @810

Con el printf no se puede hacer (que yo sepa), ya que lo que quieres no sigue un formato estándar (no es notación científica, ni siquiera ingenieril).

He buscado, pero tampoco encuentro módulos Perl que hagan esto. Se debería llamar algo así como "normalized".

En fin, se puede resolver a mano:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.18;
  3. use feature 'say';
  4.  
  5. my @numeros = qw(
  6.   86.4539
  7.   0.0023412
  8.   .23442
  9.   12.000
  10.   1234.56
  11.   -32.4553
  12.   -0.0000000012345E-12
  13. );
  14.  
  15. for my $n (@numeros) {
  16.  
  17.     my $s = sprintf( "%+.8E", $n );
  18.  
  19.     my ($sig, $ent, $man, $exp ) = $s =~ /([-+])(\d+)\.(\d+)E([-+]\d+)/;
  20.  
  21.     if ($ent > 0) {
  22.    
  23.         my $le = length $ent;
  24.  
  25.         $man = substr($ent, -$le) . $man;
  26.  
  27.         $exp += $le;
  28.        
  29.         $ent = 0;
  30.     }
  31.  
  32.     my $s1 = $sig . $ent . "." . substr($man . '00000000', 0, 8) . sprintf "E%+03d", $exp;
  33.  
  34.     say $s;
  35.     say $s1;
  36.     say '';
  37. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
+8.64539000E+01
+0.86453900E+02

+2.34120000E-03
+0.23412000E-02

+2.34420000E-01
+0.23442000E+00

+1.20000000E+01
+0.12000000E+02

+1.23456000E+03
+0.12345600E+04

-3.24553000E+01
-0.32455300E+02

-1.23450000E-21
-0.12345000E-20
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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