四舍五入数字在Perl

在Perl编程语言有几种方法可以如何圆一些,以一个整数。

根据什么你需要在结束时需要使用不同的方法。 当选择的方法四舍五入应注意如何需要 圆负数。

这里是一个表,其中显示结果的不同方法四舍五入。 所有 这些方法对于四舍五入可在Perl,如果你有Perl你 可以使用任何这些方法。

                        -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

(本表是用代码 https://PerlBanjo.com/bf555d3112 ).

  • int($x) —小数部分被丢弃
  • POSIX::floor($x) —总是轮下
  • int($x + 0.5) —为正数的工作在规则的数学四舍五入,负数字给出了一些废话
  • sprintf('%.0f', $x) —适用的规则的数学四舍五入为正数和负数。
  • POSIX::ceil($x) —总是轮了

四舍五入到几位小数位

其中一个方法如何圆一数到几位小数位在Perl 使用它 sprintf("%.2f", $x).

%.2f 指你需要多少假的数字后的小数点。 这里是一个例子码:

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

结果是:

3
3.1
3.14
3.142
3.1416
3.14159

办法四舍五入,在更新版本的Perl

开始在Perl5.22的标准分布的Perl功实施 POSIX::trunc()POSIX::round(), 从Perl5.24的功能 POSIX::lround(). 这里是表与结果 所有的方式(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

结果 POSIX::trunc($x) 在该表是相同的 int($x). 并完全相同的结果 POSIX::round($x)POSIX::lround($x) 在这个表 完全一样 sprintf('%.0f', $x).

其他文章