2012-12-25 2 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

주'은 **이 ** setlocale에있을 때 실패 할 수 있습니다/^ 0 \ .//'정규식이야 러시아어 같은 일부 로캘 – 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

관련 문제