부동 소수점 숫자를 가장 가까운 정수 대신 다음 정수로 변환하시겠습니까?

부동 소수점 숫자를 가장 가까운 정수 대신 다음 정수로 변환하시겠습니까?

맥락은 2개의 변수가 다음과 같이 나누어져 있다는 것입니다.부동 소수점결과는 다음과 같습니다.

printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333

어떻게 항상 반올림할 수 있나요?다음정수는이십 일? 이는 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를 대신 사용하세요

관련 정보