2010-03-19 23 views

Respuesta

17

sprintf hace el truco

use strict; 
use warnings; 

my $decimal_notation = 10/3; 
my $scientific_notation = sprintf("%e", $decimal_notation); 

print "Decimal ($decimal_notation) to scientific ($scientific_notation)\n\n"; 

$scientific_notation = "1.23456789e+001"; 
$decimal_notation = sprintf("%.10g", $scientific_notation); 

print "Scientific ($scientific_notation) to decimal ($decimal_notation)\n\n"; 

genera esta salida:

Decimal (3.33333333333333) to scientific (3.333333e+000) 

Scientific (1.23456789e+001) to decimal (12.3456789) 
+2

Tuve que usar "% .10f" para obtener el valor decimal, ya que "g" lo mantuvo en notación científica. Estoy usando Perl v5.10.1 en Ubuntu. Buen post, gracias! – Alan

+1

No pude hacer que 'sprintf' funcione, pero' printf' y '% .10f' en lugar de' g' funcionaron bien. Perl versión 5.14.2. – terdon

3

En un tema relacionado, si desea convertir entre la notación decimal y engineering notation (que es una versión de la notación científica) , el módulo Number::FormatEng de CPAN es útil:

use Number::FormatEng qw(:all); 
print format_eng(1234);  # prints 1.234e3 
print format_pref(-0.035); # prints -35m 
unformat_pref('1.23T');  # returns 1.23e+12 
Cuestiones relacionadas