가장 가까운 정수가 아닌 다음 정수로 부동소수점을 변환하시겠습니까?

가장 가까운 정수가 아닌 다음 정수로 부동소수점을 변환하시겠습니까?

맥락은 다음과 같이 나누어지는 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대신 사용

관련 정보