
맥락은 다음과 같이 나누어지는 2개의 변수가 있다는 것입니다.부동 소수점결과는 다음과 같습니다:
printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333
어떻게 항상 반올림할 수 있나요?다음정수, 즉21? 이는 20.5 이상의 값을 21로 반올림하는 것이 아닙니다. 즉,가장 가까운정수. 어떤 방식으로든 값이 정확히 정수이거나 다음 정수가 되기를 원하기 때문에 묻고 있습니다. 그럼 어떻게 평가할 수 있을까요? 성명서로 if
? 내가 넣으면뜨다거기에서 쉘은 정수가 필요하다고 불평합니다. 다음과 같은 Q&A의 정보를 활용하는 방법을 완전히 이해하지 못합니다.이 하나다음 정수로 "상향" 변환을 수행합니다. 내가 놓친 게 있나요?
답변1
bc
이를 위해 다음 기능을 사용할 수 있습니다 .
echo "a=305; b=15; if ( a%b ) a/b+1 else a/b" | bc
답변2
노력하다:
ceil() {
echo "define ceil (x) {if (x<0) {return x/1} \
else {if (scale(x)==0) {return x} \
else {return x/1 + 1 }}} ; ceil($1)" | bc
}
그 다음에:
$ ceil 5.1
6
$ ceil 5.5
6
$ ceil 5.9
6
답변3
양의 정수의 경우:
a=305
b=15
echo $((a%b?a/b+1:a/b))
21
답변4
결과를 통해 awk
추가 하면 가장 가까운 숫자로 반올림됩니다.0.5
.f
awk 'BEGIN{printf("%.f\n", (305/15)+0.5)}'
21
당신이 그것을 원한다면바닥함수, -0.5
대신 사용