如何在Perl中将字符串转换为浮点数?

3
有没有类似于int()的函数可以将字符串转换为浮点数值? 我目前正在使用以下代码:
$input=int(substr($line,1,index($line,",")-1));

我需要将由substr返回的字符串转换为浮点数。

你能给一个 $line 是如何生成的例子吗? - Nathan Fellman
$line 是从日志文件中读取的。 打开(fHandle,“+ <”,$path)或死亡“$!”; 对于每个 $line (<fHandle>) {$input = int(substr($line,1,index($line,",")-1)); } 这是完整的代码。 - fixxxer
请提供您文件中的一行示例,这样我们可以建议更好的提取数字的方法。 - slebetman
[1258200601.016453,'未知','错误','未知异常',110012] - fixxxer
1
请在问题中提供任何澄清信息,而不是将其隐藏在评论中,以改进您的问题。 - brian d foy
2个回答

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时,会出现以下错误: Argument "1258200601.5027449," isn't numeric in int at test.pl - fixxxer
1
如果这确实是错误,那么你的数字中有一个逗号,这使它不成为一个数字。 - slebetman
编辑:删除了int()因为您想要float ... @fixxxer:抱歉,我从您的示例中复制/粘贴。 - slebetman

1

我不知道你的数据长什么样,但你应该意识到substr的第三个参数是长度而不是位置,对吧?另外,第一个位置是0。我怀疑你得到的数据并不是你想要的,而且它大多数时候只是偶然起作用,因为你从字符串的开头开始,并且只差了一个。


数据以“ [”开头。因此,我们最好从0开始而不是将其作为substr的第二个参数传入1。当然,第三个参数必须是一个数字。在代码中,有什么让你认为我们忽视了这一点吗? - fixxxer
1
index()让我觉得你忽略了,而且你没有提取 Perl 认为是数字的东西。给我们展示一个带有输入数据的完整示例,这样我们就不必猜测了。 - brian d foy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接