
Der Kontext ist, dass es zwei Variablen gibt, die in eineGleitkommaErgebnis wie folgt:
printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333
Wie kann ich immer aufrunden aufnächsteGanzzahl, d. h.21? Es geht hier nicht darum, einen Wert über 20,5 auf 21 aufzurunden, d.h.nächsteGanzzahl. Ich frage, weil ich möchte, dass ein Wert entweder genau die Ganzzahl oder die nächste Ganzzahl ist, wenn sie in irgendeiner Weise darüber liegt. Wie kann ich das also auswerten? Mit einer if
Anweisung? Wenn ich einschwebendort beschwert sich die Shell, dass sie eine Ganzzahl erwartet. Ich verstehe nicht ganz, wie ich die Informationen in einem Q&A wie diesem nutzen kann.Dieses hierum eine Konvertierung „nach oben“ zur nächsten Ganzzahl durchzuführen. Übersehe ich etwas?
Antwort1
Sie können bc
hierfür folgende Funktionen nutzen:
echo "a=305; b=15; if ( a%b ) a/b+1 else a/b" | bc
Antwort2
Versuchen:
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
}
Dann:
$ ceil 5.1
6
$ ceil 5.5
6
$ ceil 5.9
6
Antwort3
für positive ganze Zahlen:
a=305
b=15
echo $((a%b?a/b+1:a/b))
21
Antwort4
Durch „+ “ wird das Ergebnis awk
ergänzt und anschließend wird es von selbst auf die nächste Zahl aufgerundet.0.5
.f
awk 'BEGIN{printf("%.f\n", (305/15)+0.5)}'
21
Wenn Sie möchten, dass esBodenFunktion, verwenden Sie -0.5
stattdessen