O arredondamento de números em Perl

Na linguagem de programação Perl existem várias maneiras de como você pode arredondar um número para um inteiro.

Dependendo do que é necessário acabar precisa usar diferentes métodos. Quando a escolha de um método de arredondamento vale a pena prestar atenção em como deve округляться os números negativos.

Aqui está uma tabela que mostra os resultados de diferentes métodos de arredondamento. Todos esses métodos de arredondamento estão disponíveis em Perl a partir de uma caixa, se você tem um Perl, você pode utilizar qualquer um destes métodos.

                        -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

(Esta tabela foi criada com o código https://PerlBanjo.com/bf555d3112 ).

  • int($x) — é descartado parte fracionária
  • POSIX::floor($x) — arredonda sempre para baixo
  • int($x + 0.5) — para números positivos, funciona de acordo com a regra matemática de arredondamento, e, para números negativos, emite algum tipo de besteiras
  • sprintf('%.0f', $x) — trabalha com a regra de arredondamento matemático, como para os aspectos positivos e números negativos.
  • POSIX::ceil($x) — arredonda sempre para cima

O arredondamento para múltiplos de caracteres após o ponto e vírgula

Uma das maneiras de como você pode arredondar um número para vários caracteres após o ponto e vírgula no Perl — é usar sprintf("%.2f", $x).

O número de %.2f significa o quanto você precisa deixar de dígitos depois da vírgula. Aqui está um exemplo de código:

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

Resultado do trabalho:

3
3.1
3.14
3.142
3.1416
3.14159

Métodos de arredondamento de novas versões do Perl

Começando c versão do Perl 5.22 standard Perl apareceu função POSIX::trunc() e POSIX::round(), e com a versão do Perl 5.24 tem um recurso de POSIX::lround(). Aqui está a tabela com o resultado o trabalho de todas as maneiras (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

Os resultados POSIX::trunc($x) nesta tabela, exatamente como int($x). E, da mesma forma, os resultados POSIX::round($x) e POSIX::lround($x) esta tabela exatamente como sprintf('%.0f', $x).

Outros artigos