So che questa è una domanda per principianti, ma la risposta potrebbe non essere ovvia per molti nuovi programmatori. Non era inizialmente ovvio per me, così ho setacciato Internet cercando i moduli Perl per fare questo semplice compito.Come posso convertire tra notazione scientifica e decimale in Perl?
5
A
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)
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
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
Non ho potuto ottenere 'sprintf' per funzionare ma' printf' e '% .10f' invece di' g' funzionavano bene. Perl versione 5.14.2. – terdon