Afrunding numre i Perl

I programmeringssproget Perl der er flere måder, hvordan du kan afrunde et tal til et heltal.

Afhængigt af hvad du har brug for at i sidste ende er nødt til at bruge forskellige metoder. Når du vælger metoden med afrunding bør være opmærksom på, hvordan behov afrundet negative tal.

Her er en tabel der viser resultaterne af forskellige metoder af afrunding. Alle disse metoder til afrunding er tilgængelige i Perl ud af boksen, hvis du har Perl, du kan du bruge en af disse metoder.

                        -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

(Denne tabel blev oprettet ved hjælp af kode https://PerlBanjo.com/bf555d3112 ).

  • int($x) — brøkdelen er kasseret
  • POSIX::floor($x) — altid runder ned
  • int($x + 0.5) — for positive tal arbejde på reglen om matematiske afrunding, og negative tal giver nogle vrøvl
  • sprintf('%.0f', $x) — værker, som regel af matematiske afrunding for positive og negative tal.
  • POSIX::ceil($x) — altid runder op

Afrunding til et par decimaler

En af de måder, hvordan at afrunde et tal til at få decimaler i Perl at bruge det sprintf("%.2f", $x).

Antallet i %.2f betyder, hvor meget du nødt til at forlade cifre efter kommaet. Her er et eksempel kode:

▶ 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());

Resultat:

3
3.1
3.14
3.142
3.1416
3.14159

Måder af afrunding i nyere versioner af Perl

Starter i Perl 5.22 i standard distribution af Perl funktioner, som er implementeret POSIX::trunc() og POSIX::round(), og fra Perl 5.24 funktion POSIX::lround(). Her er tabellen med resultat af alle de måder (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

Resultater POSIX::trunc($x) i denne tabel er de samme som int($x). Og præcis de samme resultater, POSIX::round($x) og POSIX::lround($x) i denne tabel præcis det samme som sprintf('%.0f', $x).

Andre artikler