Преобразовать число с плавающей точкой в ​​следующее целое число, а не в ближайшее?

Преобразовать число с плавающей точкой в ​​следующее целое число, а не в ближайшее?

Контекст таков: есть 2 переменные, которые делятся наплавающая запятаярезультат такой:

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

Как я могу всегда округлять доследующийцелое число т.е.21? Речь не идет об округлении значения выше 20,5 до 21, т.е.ближайшийцелое число. Я спрашиваю, потому что я хочу, чтобы значение было либо точным целым числом, либо следующим целым числом, если оно выше каким-либо образом. Так как я могу это оценить? С помощью оператора if? Если я помещуплаватьтам оболочка жалуется, что ожидает целое число. Я не совсем понимаю, как использовать информацию в вопросах и ответах, напримерВот этотдля осуществления преобразования "вверх" к следующему целому числу. Что-то я упускаю?

решение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вместо этого

Связанный контент