2010-03-19 14 views

risposta

17

sprintf fa il trucco

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 questo output:

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

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

Ho dovuto usare "% .10f" per ottenere il valore decimale, poiché "g" lo manteneva in notazione scientifica. Sto usando Perl v5.10.1 su Ubuntu. Bel post, grazie! – Alan

+1

Non ho potuto ottenere 'sprintf' per funzionare ma' printf' e '% .10f' invece di' g' funzionavano bene. Perl versione 5.14.2. – terdon

3

Su un tema correlato, se si desidera per la conversione tra la notazione decimale e engineering notation (che è una versione di notazione scientifica) , il modulo Number::FormatEng da CPAN è a portata di mano:

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 
Problemi correlati