將浮點數轉換為下一個整數而不是最接近的整數?

將浮點數轉換為下一個整數而不是最接近的整數?

上下文是有 2 個變數被劃分為浮點結果像這樣:

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

我怎樣才能總是四捨五入到下一個整數即21?這並不是將 20.5 以上的值向上捨入到 21,即最近的整數。我這麼問是因為我希望一個值要么恰好是整數,要么是下一個整數(如果它以任何方式位於上面)。那我該如何評價呢?有if聲明嗎?如果我放一個漂浮shell 抱怨它需要一個整數。我不完全理解如何利用問答中的信息,例如這個實現“向上”轉換到下一個整數。我缺少什麼嗎?

答案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它代替

相關內容