【问题标题】:perl floor function giving error undefined subroutine &main::floorperl floor 函数给出错误未定义子例程 &main::floor
【发布时间】:2016-08-29 10:38:16
【问题描述】:

我是 perl 新手,以下代码无法正常工作并出现以下错误。我尝试了谷歌搜索,但没有得到任何解决方案。

$halfSize = floor($halfSize);

未定义的子程序 &main::floor 调用

【问题讨论】:

    标签: perl


    【解决方案1】:

    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;
    }
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • floorint 的负数不同。 int 向零舍入,而floor 向 -∞ 舍入
      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 2011-05-21
      • 2012-01-30
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多