2016-08-09 1 views
0

제 문제는 반환 값 im 인쇄가 값으로 변환되지 않는다는 것입니다.sprintf 함수 호출에서 올바른 반환 값을 가져올 수 없습니다.

테스트 파일에 다음 코드가 있습니다. 반환

#!/usr/bin/perl -I/srv/www/jonathan/m/www  
my $var = sprintf("$%.1f lbs",(77*2.20462)); 
print $var; 

그 대신 내가 볼 필요 값의 0.1f.

내가 여기서 잘못하고있는 것은 무엇입니까? 나는 펄 뉴비 야.

+1

'$ '기호를 제거하십시오 :'sprintf ("% .1f lbs", ...)'. ['sprintf'] (http://perldoc.perl.org/functions/sprintf.html)를보십시오. – zdim

+0

무엇을 인쇄하려고합니까? '$'앞에는 인수 위치가 필요하지만 어떤 인수를 지정하지 않습니다. – verbose

답변

1

Perl은 스칼라 변수를 선언 할 때 dolar ($) 기호를 사용하여 sprintf에서 $ 기호를 제거해야합니다.

수정 코드

my $var = sprintf("%.1f lbs",(77*2.20462)); 
print $var; 

출력

169.8 lbs 
+0

큰 따옴표를 작은 따옴표로 변경하는 것이 더 간단하고 출력을 변경하지 않습니다. –

+0

'$'기호를 변수로 사용하지 않기 때문에 출력 요구 사항에 대해 확신하지 못합니다. 질문자가 가치에만 관심이 있다고 생각합니다. – Arijit

+0

그가 당신의 대답을 받아 들였기 때문에 당신이 옳을 수도 있습니다. 하지만 당신은 추측하고있었습니다. 나는 항상 질문을하는 사람이 원하는 출력을 알고 있고 그렇지 않은 출력보다 원본 출력을 재생산하는 대답을 줄 것이라고 가정합니다. –

2

귀하의 문제는 펄이 해석이다 "$의 %를. 1 층" ".1f입니다"다음에 변수 $%있다. $%은 "현재 선택된 출력 채널의 현재 페이지 번호"(perlvar 참조)를 포함하고 값이 0 인 특수 Perl 변수이므로 "0.1f"문자열이 인쇄됩니다.

몇 가지 방법이 있습니다.

달러 기호 : sprintf("%.1f lbs",(77*2.20462))을 제거 할 수 있습니다. 하지만 이렇게하면 표시되는 문자열이 변경됩니다.

Perl에게 특별한 것이 아니라고 말하면서 달러를 벗어날 수 있습니다 : sprintf("\$%.1f lbs",(77*2.20462)).

하지만 더 나은 해결책이 있다고 생각합니다. Perl은 달러 기호를 큰 따옴표로 묶은 문자열에서 특수 문자로 취급합니다. 그러나 문자열을 큰 따옴표로 묶을 필요는 없습니다. 따라서 작은 따옴표를 사용하도록 형식 문자열을 변경하십시오 : sprintf('$%.1f lbs',(77*2.20462)).

내가 마지막으로 사용한 해결책입니다.

관련 문제