在perl中,我想检查给定的变量是否包含浮点数。要检查这个我使用,检查一个数是int还是浮点数
my $Var = 0.02 # Floating point number
if (int($Var) != $Var) {
# floating point number
}
但上面的代码不会为0.0工作,
我怎样才能做到这一点?
在perl中,我想检查给定的变量是否包含浮点数。要检查这个我使用,检查一个数是int还是浮点数
my $Var = 0.02 # Floating point number
if (int($Var) != $Var) {
# floating point number
}
但上面的代码不会为0.0工作,
我怎样才能做到这一点?
这是一个常见问题解答。请参见How do I determine whether a scalar is a number/whole/integer/float?
您也可以使用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;
打印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;
输出:
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也要花费我很长时间,所以我不会提供实现。
($Var - int($Var))?'float':'int'
警告:这将调用一个字符串“int”。它验证数字,但不能保证'$ Var'实际上是数字。 – stevesliva 2017-08-09 18:00:00
您可以使用自动装箱::通用模块,这是autobox的一部分。
#! /usr/bin/perl
use autobox::universal qw(type);
my $x = 42;
print type($x), "\n";;
$x = 42.0;
print type($x), "\n";
输出:
INTEGER
FLOAT
什么正确回答你的问题完全取决于你为什么想知道的。你计划对浮点数有什么不同? – ysth 2010-11-04 09:18:33