Rundung von zahlen in Perl

In der Programmiersprache Perl gibt es mehrere Möglichkeiten, wie man aufrunden eine Zahl auf eine Ganzzahl.

Je nachdem, was müssen Sie im Endeffekt verwenden müssen, verschiedene Möglichkeiten. Bei der Auswahl der Rundung darauf achten muss wie negative zahlen gerundet.

Hier in der Tabelle zeigt die Ergebnisse der verschiedenen Methoden für die Rundung. Alle diese Methoden zur Rundung sind in Perl aus der Box, wenn Sie ein Perl, Sie können jede dieser Methoden verwenden.

                        -1.8  -1.5  -1.2   0     1.2   1.5   1.8
.................................................................
int($x)                 -1    -1    -1     0     1     1     1
POSIX::floor($x)        -2    -2    -2     0     1     1     1
int($x + 0.5)           -1    -1     0     0     1     2     2
sprintf('%.0f', $x)     -2    -2    -1     0     1     2     2
POSIX::ceil($x)         -1    -1    -1     0     2     2     2

(Diese Tabelle wurde mit Hilfe des Codes https://PerlBanjo.com/bf555d3112 ).

  • int($x) — der Bruchteil verworfen
  • POSIX::floor($x) — rundet immer nach unten
  • int($x + 0.5) — bei positiven zahlen funktioniert nach der Regel der mathematischen Rundung, und für negative zahlen gibt einige Unsinn
  • sprintf('%.0f', $x) — arbeitet nach der Regel der mathematischen Rundung, sowohl für positive als auch für negative zahlen.
  • POSIX::ceil($x) — rundet immer nach oben

Rundung bis zu mehreren Zeichen nach dem Komma

Eine Möglichkeit, wie man die Anzahl der Runden bis zu mehreren Zeichen nach dem Komma in Perl — das verwenden sprintf("%.2f", $x).

Die Zahl der in %.2f bedeutet wie viel muss Sie zahlen nach dem Komma. Hier ist der Beispielcode:

▶ Run
#!/usr/bin/perl

use feature qw(say);
use Math::Trig;

say sprintf("%.0f", pi());
say sprintf("%.1f", pi());
say sprintf("%.2f", pi());
say sprintf("%.3f", pi());
say sprintf("%.4f", pi());
say sprintf("%.5f", pi());

Das Ergebnis der Arbeit:

3
3.1
3.14
3.142
3.1416
3.14159

Methoden für die Rundung in frischen Versionen von Perl

Seit Perl Version 5.22 in der Standard-Perl-Funktionen erschienen POSIX::trunc() und POSIX::round(), und mit Perl Version 5.24 die Funktion POSIX::lround(). Hier ist eine Tabelle mit dem Ergebnis die Arbeit aller Möglichkeiten (https://PerlBanjo.com/4314405cde ):

                        -1.8  -1.5  -1.2   0     1.2   1.5   1.8
.................................................................
int($x)                 -1    -1    -1     0     1     1     1
POSIX::trunc($x)        -1    -1    -1     0     1     1     1
POSIX::floor($x)        -2    -2    -2     0     1     1     1
int($x + 0.5)           -1    -1     0     0     1     2     2
POSIX::round($x)        -2    -2    -1     0     1     2     2
POSIX::lround($x)       -2    -2    -1     0     1     2     2
sprintf('%.0f', $x)     -2    -2    -1     0     1     2     2
POSIX::ceil($x)         -1    -1    -1     0     2     2     2

Die Ergebnisse POSIX::trunc($x) in dieser Tabelle ist genau das gleiche wie int($x). Und genau die gleichen Ergebnisse POSIX::round($x) und POSIX::lround($x) in dieser Tabelle genau das gleiche wie sprintf('%.0f', $x).

Andere Artikel