在perl中,我想检查给定变量是否保持浮点数不是.为了检查我正在使用,
my $Var = 0.02 # Floating point number
if (int($Var) != $Var) {
# floating point number
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码不适用于0.0,
我怎样才能做到这一点?
Sin*_*nür 15
这是一个FAQ.请参阅如何确定标量是否为数字/整数/整数/浮点数?
您也可以使用Scalar :: Util :: Numeric.
有趣的是,虽然
#!/usr/bin/perl
use strict; use warnings;
use Scalar::Util::Numeric qw(isint);
my $x = 0.0;
print "int\n" if isint $x;
Run Code Online (Sandbox Code Playgroud)
打印int
(如果你看看源代码并不奇怪),基于@ tchrist的评论,应该可以看的变量结构来区分所提供的信息0
来自0.0
:
#!/usr/bin/perl
use strict; use warnings;
use Devel::Peek;
my $x = 0.0; print Dump $x;
my $y = 0; print Dump $y;
$y *= 1.1; print Dump $y;
Run Code Online (Sandbox Code Playgroud)
输出:
SV = NV(0x18683cc) at 0x182c0fc REFCNT = 1 FLAGS = (PADMY,NOK,pNOK) NV = 0 SV = IV(0x182c198) at 0x182c19c REFCNT = 1 FLAGS = (PADMY,IOK,pIOK) IV = 0 SV = PVNV(0x397ac) at 0x182c19c REFCNT = 1 FLAGS = (PADMY,NOK,pNOK) IV = 0 NV = 0 PV = 0
在我看来,检查只需要看看是否NOK
设置了标志.即使是最简单的XS也需要很长时间才能编写,因此我不会提供实现.
小智 7
($Var - int($Var))?'float':'int'
Run Code Online (Sandbox Code Playgroud)