999 ... 9是Perl中的真实数字吗?

2 perl

sub is_integer {
   defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
}

sub is_float {
   defined $_[0] && $_[0] =~ /^[+-]?\d+(\.\d+)?$/;
}
Run Code Online (Sandbox Code Playgroud)

对于上面提到的代码,如果我们给出输入999999999999999999999999999999999999999999,它给出的输出不是实数.

为什么它表现得那样?

我忘了再说一件事:

如果我使用此代码$x作为上述值:

if($x > 0 || $x <= 0 ) {
print "Real";
}
Run Code Online (Sandbox Code Playgroud)

输出是real.

这怎么可能?

Mic*_*rny 10

$ perl -e 'print 999999999999999999999999999999999999999999'
1e+42
Run Code Online (Sandbox Code Playgroud)

即Perl对此数字使用科学表示,这就是你的正则表达式不匹配的原因.


dra*_*tun 7

使用Scalar :: Util(这是一个核心模块)中的looks_like_number函数.

use Scalar::Util qw( looks_like_number );

say "Number" if looks_like_number 999999999999999999999999999999999999999999;

# above prints "Number"
Run Code Online (Sandbox Code Playgroud)

  • Scalar :: Util是一个核心模块,所以它带有Perl (4认同)
  • 这意味着上面的'use'命令无需安装任何东西即可运行.但是,如果它反对'说',则使用'print'代替('说'有点现代,在Perl 5.8中不起作用). (2认同)