
Контекст таков: есть 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
вместо этого