2012-12-25 14 views

回答

2

您可以spritnf做到這一點:

my $rounded = sprintf("%.3f", 1/3); 

這不是這個sprintf的目的,但它的工作。

如果你想點後僅三個數字,你可以用數學計算做到這一點:

my $num = 1/3; 
my $part; 
$part = $1 if $num=~/^\d+\.(\d{3})/; 
print "3 digits after dot: $part\n" if defined $part; 
+0

@ikegami是sprintf格式化函數,它不是很優雅地使用像這樣IMO – PSIAlt

+3

請注意,'sprintf'解決方案輪了,但第二個沒有。其中一個肯定是錯的。 – ikegami

0

使用sprintf和一些模式匹配。詳細。

my $str; 
my $num = 1/3; 
my $res = sprintf("%.3f\n",$num); 
($str = $res) =~ s/^0\.//; 
print "$str\n"; 
+0

注單曲/^0 \ .//'正則表達式時,你有**的setlocale會失敗**到一些地區,如俄羅斯。 – PSIAlt

+0

@PSIAlt,我認爲語言環境只在'use locale;'下很重要。你確定? – ikegami

+0

@ikegami yes'perl -MPOSIX -e'setlocale(LC_ALL,「ru_RU.UTF8」); printf「%.3f」,1/3;''爲我打印'0,333'。 – PSIAlt

相關問題