perl floor函数给出错误undefined subroutine& main :: floor

时间:2016-05-04 06:32:50

标签: perl

我是perl的新手,以下代码段无效并收到以下错误。我试过谷歌搜索,但没有得到任何解决方案。

$halfSize = floor($halfSize);

Undefined subroutine& main :: floor called

2 个答案:

答案 0 :(得分:6)

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。选择是你的

或者,您可以根据内置运算符floor

编写自己的int子例程
sub floor {
    my ($n) = @_;
    my $int_n = int($n);
    $n < 0 && $int_n != $n ? $int_n - 1: $int_n;
}

答案 1 :(得分:1)

perl中的

floor拼写为int

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

...但请注意 - 正如鲍罗丁在评论中指出的那样 - int向0舍入,这将给出负数的不同结果。

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

use POSIX qw/floor/;

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