【发布时间】:2016-08-29 10:38:16
【问题描述】:
我是 perl 新手,以下代码无法正常工作并出现以下错误。我尝试了谷歌搜索,但没有得到任何解决方案。
$halfSize = floor($halfSize);
未定义的子程序 &main::floor 调用
【问题讨论】:
标签: perl
我是 perl 新手,以下代码无法正常工作并出现以下错误。我尝试了谷歌搜索,但没有得到任何解决方案。
$halfSize = floor($halfSize);
未定义的子程序 &main::floor 调用
【问题讨论】:
标签: perl
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 在 cmets 中指出的那样 - int 向 0 舍入,这将对负数给出不同的结果。
或者,您可以使用 POSIX 版本;
use POSIX qw/floor/;
my $num = 22.6;
my $floor = floor($num);
say $floor;
# => 22
【讨论】:
floor 与 int 的负数不同。 int 向零舍入,而floor 向 -∞ 舍入