Perl floor 函数给出错误未定义的子例程 &main::floor



我是perl的新手,下面的代码不起作用,出现了以下错误。我试着在谷歌上搜索,但没有找到任何解决方案。

$halfSize = floor($halfSize);

未定义的子例程&main::称为的楼层

floor不是Perl 中的内置运算符

你可以像这个一样使用Math::Utils模块

use strict;
use warnings 'all';
use feature 'say';
use Math::Utils 'floor';
say floor(1.5);
say floor(-1.5);

输出

1
-2

您可能需要安装Math::Utils,因为它不是核心模块。POSIX模块还有一个floor函数,应该作为Perl的一部分安装,这样您就可以通过编写use POSIX 'floor'来使用它。但它是一个巨大的模块,包含了许多您不需要的功能。在我的系统上,Math::Utils占用1MB,而POSIX占用1.7MB。选择权在

或者,您可以根据内置运算符int 编写自己的floor子程序

sub floor {
    my ($n) = @_;
    my $int_n = int($n);
    $n < 0 && $int_n != $n ? $int_n - 1: $int_n;
}

floor在perl:中拼写为int

my $num = 22.8;
my $floor = int($num);
say $floor;
# => 22

但要注意——正如Borodin在评论中指出的那样——int向0舍入,这将为负数给出不同的结果。

或者,您可以使用POSIX版本;

use POSIX qw/floor/;
my $num = 22.6;
my $floor = floor($num);
say $floor;
# => 22

最新更新