: 서브 쉘을 생성 피할 수있는 다음과 같은
또한,이 역시 기원전에 대한 입력으로 여기 문서를 리디렉션하여 파이프없이 작동 번호, 당신은 그것을 자르고 있습니다. 나는 규모가 아마도 당신이 원하는 모든 방식으로 행동하지 않을 것이라고 말할 것입니다. 아마도 아무도 행동하지 않기를 원할 것입니다.
> x="5+50*3/20 + (19*2)/7"
> echo "$x" | bc -l
17.92857142857142857142
> echo "scale = 3; $x" | bc -l
17.928
또한 because of the behaviour of scale, 당신은 추가 별도로 각 곱셈/나눗셈 반올림된다.몇 가지 예를 들어 설명해 드리겠습니다 :
> echo "scale=0; 5/2" | bc -l
2
> echo "scale=0; 5/2 + 7/2" | bc -l
5
> echo "5/2 + 7/2" | bc -l
6.00000000000000000000
아무런 스케일도 작동하지 않습니다. 추악한 해결 방법이 있습니다.
> echo "scale=0; 5.5" | bc -l
5.5
> echo "scale=0; 5.5/1" | bc -l
5
이렇게 토우 물건이 나옵니다.
는 반올림해야 숫자에 0.5를 추가하면 우리가 가장 가까운 정수로 반올림의 예를 들어 보자, 그 정수 부분은 다음 정수 값을하고 절단하여 원하는 결과를 줄 것이다. 해당 숫자가 반올림 된 것이면 .5를 추가해도 정수 값이 변경되지 않으며 잘라내 기가 추가되지 않은 경우와 동일한 결과를 가져옵니다.
따라서 내 솔루션은 다음과 같습니다
다시
> y=$(echo "$x" | bc -l)
> echo "scale=3; ($y+0.0005)/1" | bc -l # scale doesn't apply to the +, so we get the expected result
17.929
, 정말 필요하므로이 작업에 그것을 파괴, (위에서 설명) 다음이 작동하지 않습니다 :
> echo "scale=3; ($x+0.0005)/1" | bc -l
17.928
귀하 질문이 아주 모호합니다. "샘플 출력"이란 무엇입니까? "내 결과"란 무엇입니까? "기계는 그것이되기를 원한다"라고하는 것은 무엇입니까? 사실, 스크립트가 생성하기를 원하는 출력은 무엇입니까? 잘라 버리거나 둥글니까? –
샘플 입력은 내 스크립트가 맞는지 아닌지를 확인하기 위해 기계가 생성하는 입력입니다.이 출력에 대해 출력은 샘플 출력입니다. 내 출력은 내 스크립트가 생성하는 출력입니다. 출력이 샘플 출력과 비슷해야합니다. @ YvesDaoust – krrish
어쩌면 설명을 덜 모호하게 만들지 않았다고 잘못 말할 수 있는지 모르겠습니다. 잘린 또는 둥근? –