2010-01-07 135 views
2

是否有像int()这样的函数可以将字符串转换为浮点值? 我目前使用下面的代码:如何将字符串转换为使用Perl的float?

$input=int(substr($line,1,index($line,",")-1)); 

我需要通过substr返回飘起了字符串转换。

+0

你可以举一个'$ line'如何生成的例子吗? – 2010-01-07 09:04:53

+0

$行是从日志文件中读取的。打开(fHandle,“+ <”,$ path)或死掉“$!”; foreach $ line() \t \t {\t $ input = int(substr($ line,1,index($ line,“,”) - 1)); } 这是完整的代码。 – fixxxer 2010-01-07 09:31:27

+0

我们是否可以从您的文件中获取示例行,以便我们可以提出更好的方法来提取数字。 – slebetman 2010-01-07 09:41:26

回答

17

只要使用它。在Perl中,看起来像一个数字的字符串是一个数字。现在

,如果你想使用它之前确认的事情是一个数字再有就是在Scalar::Util个实用方法做的:根据您在离开样品的输入

use Scalar::Util qw/looks_like_number/; 

$input=substr($line,1,index($line,",")-1); 

if (looks_like_number($input)) { 
    $input += 1; # use it as a number! 
} 

意见,提取数的更强大的方法是:

$line =~ /([^\[\],]+)/; # <-- match anything not square brackets or commas 
$input = $1;   # <-- extract match 
+1

当我使用substr时,我得到以下错误: 参数“1258200601.5027449,”在int中不是数字test.pl – fixxxer 2010-01-07 09:30:10

+1

如果这真的是错误,那么您的数字中有一个逗号,它使它不一个号码。 – slebetman 2010-01-07 09:39:21

+0

编辑:删除int(),因为你想浮动... @fixxxer:对不起,我复制/粘贴你的例子。 – slebetman 2010-01-07 09:42:52

1

我不知道你的数据是什么样子,但你一定要明白,在第三个参数substr是一个长度,不一个位置,对吧?此外,第一个位置是0.我怀疑你没有得到你认为你得到的数据,并且它大多意外地起作用,因为你从字符串的开始处开始并且只关闭一个。

+0

数据以“[”。“开头,所以我们从0开始,而不是1开始作为substr.Ofcourse的第二个参数,第三个必须是一个数字。代码中的什么让你认为我们忽略了? – fixxxer 2010-01-07 13:42:22

+1

index()让我觉得你忽略了这一点,并且你没有提取Perl认为是一个数字的事实。向我们展示输入数据的完整示例,因此我们不必猜测。 – 2010-01-07 13:47:06