2012-11-16 42 views
3

是否可以使用Perl的sprintf函數爲浮點數指定最大精度寬度?在閱讀文檔後,我相信這不是,但可能是我忽略了一些東西。我可以在Perl中爲sprintf指定數字的最大精度寬度嗎?

所以,如果我有4.12,我想要編號格式爲4.12

my $abc = 4.12; 
my $out = sprintf("%?...", $abc); # $out eq '4.12'; 

然而,如果數值的精度超過6個位數,我想只有6位:

my $def = 1.23456789; 
my $out = sprintf("%?...", $def); # $out eq '1.234568'; 

這可能與sprintf

編輯

Currentyl,我使用

sub output_number { 
    my $number = shift; 

    my $ret = sprintf("%.6f", $number); 

    $ret =~ s/0*$//g; 
    $ret =~ s/\.$//g; 

    return $ret; 
} 

對於我而言,這的確是我所需要的。但我希望有一種更優雅的方式。優選地,一個襯墊,不一定限於使用sprintf

還要注意,建議printf ("%.7g", $number)不表現我想(例如用於$n = 0.00000000001;方式

+1

'人sprintf'可能是一個很好的閱讀... – pavel

回答

4

我相信你可以使用%.<n>g

perl -e 'printf "%.7g", 4.12'   => 4.12 
perl -e 'printf "%.7g", 4.12345678' => 4.123457 

但如果指數符號真的毀了你一天,你的安裝Perl足夠現代,總有

sprintf("%.6f",$number) =~ s/\.?0+$//r 
+2

請注意,大號或小號(無論是符號)都會以'1.1234567e + 123'出現 – ikegami

+0

確實如此。 'perl -e「printf('%。7g',0.000000001);''結果在'1e-009',我想這是一個'0'。 'perl -e「printf('%。7g',10_000_000);''結果在'1e + 007',我想要一個'10000000'。 –

相關問題