2010-03-19 30 views

cevap

17

sprintf kandırmasına

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"; 

yapar bu çıktıyı oluşturur: Eğer (bilimsel gösterimde bir sürümünü olan) ondalık gösterimle ve engineering notation arasında dönüştürmek istiyorsanız,

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

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

Ondalık değeri elde etmek için "% .10f" yi kullanmalıydım, çünkü "g" onu bilimsel gösterimde tutuyordu. Ubuntu'da Perl v5.10.1 kullanıyorum. Güzel yazı, teşekkürler! – Alan

+1

Çalışmak için sprintf alıyorum ama 'printf' ve' '% .10f' yerine' g' çalıştı. Perl sürümü 5.14.2. – terdon

3

ilgili tema üzerinde CPAN'dan gelen Number::FormatEng modülü kullanışlıdır:

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