Eine Gleitkommazahl in die nächsthöhere Ganzzahl umwandeln, statt in die nächstgelegene?

Eine Gleitkommazahl in die nächsthöhere Ganzzahl umwandeln, statt in die nächstgelegene?

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 ifAnweisung? 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 bchierfü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 awkergä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.5stattdessen

verwandte Informationen