2016-09-05 2 views
0
5+50*3/20 + (19*2)/7 = 17.9285714286 
        = 17.929 

아래의 bash 연산을 수행하여 정확한 값을 자릿수 3 자리로 자르고 싶습니다. 즉, 17.929입니다.왜 bash에서 반올림 오류가 발생합니까?

echo " scale = 3; 5+50*3/20 + (19*2)/7 " | bc 

그러나 그것은 나에게 값 17.928을 제공합니다.

$ echo " scale = 3; 5+50*3/20 + (10*9)/7 " | bc 
17.928 

무엇을 할 수 있습니까 ??

N.B .: 이것은 Hackerrank challenge입니다. 콘솔에서도 올바른 출력을 내지 못합니다.

답변

3

을 그 계산.

정확한 출력을 얻으려면, bcprintf를 사용 표현식이 변수 $var 안에

$ printf '%.3f\n' "$(bc -l <<<'5+50*3/20 + (19*2)/7')" 
17.929 

경우, "$var"와 작은 따옴표로 문자열을 교체합니다.

+0

감사! 그것은 나에게 지금 분명하다. :) – jbsu32

4

bc은 반올림하지 않고 10 진수로 표시합니다. 당신은 AWK 사용할 수 있습니다 : 당신이 bcscale=3를 사용하는 경우에만, 당신이 bc 할 때 사용되는 소수 자릿수의 수를 제한하고 출력에 소수 자릿수를 지정하지 않는,

awk 'BEGIN{printf "%.3f\n", 5+50*3/20 + (19*2)/7}' 
17.929 
+0

고맙습니다. 작동 중! 그러나 변수를 처리하는 방법 ?? 제 말은'awk 'BEGIN {printf "% .3f \ n", $ a}''출력은'0.000'입니다. – jbsu32

+0

다음과 같이 쓸 수 있습니다 :'s = '5 + 50 * 3/20 + (19 * 2)/7'; awk 'BEGIN {printf "% .3f \ n",' "$ s" '}' '을 입력하십시오. – anubhava