在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