【问题标题】:How can I convert a string to a float with Perl?如何使用 Perl 将字符串转换为浮点数?
【发布时间】:2011-01-02 09:56:56
【问题描述】:

有没有像int() 这样可以将字符串转换为浮点值的函数? 我目前正在使用以下代码:

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

我需要将substr返回的字符串转换为float。

【问题讨论】:

  • 你能举例说明$line是如何生成的吗?
  • $line 是从日志文件中读取的。 open (fHandle,"+) { $input=int(substr($line,1,index($line,",")-1));这是完整的代码。
  • 我们能否从您的文件中提供一个示例行,以便我们提出更好的方法来提取数字。
  • 当然。给你 - [1258200601.016453, 'unknown', 'error', 'unknown Exception', 110012]
  • 请通过任何澄清改进您的问题,而不是隐藏在 cmets 中。

标签: perl floating-point string-parsing


【解决方案1】:

只需使用它。在 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!
}

根据您在 cmets 中留下的样本输入,提取数字的更稳健的方法是:

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

【讨论】:

  • 当我按原样使用 substr 时,出现以下错误:Argument "1258200601.5027449," is not numeric in int at test.pl
  • 如果这确实是错误,那么您的号码中有一个逗号,这使它不是一个数字。
  • 编辑:删除 int() 因为你想要浮动... @fixxxer:对不起,我从你的例子中复制/粘贴了。
【解决方案2】:

我不知道您的数据是什么样的,但您确实意识到substr 的第三个参数是长度,而不是位置,对吧?另外,第一个位置是 0。我怀疑你没有得到你认为你得到的数据,而且它大多是意外地起作用,因为你从字符串的开头开始并且只差一个。

【讨论】:

  • 数据以“[”开头。所以明智的做法是我们从 0 而不是 1 作为 substr 的第二个参数开始。当然,第三个必须是数字。代码,让你认为我们忽略了这一点?
  • index() 让我觉得你忽略了这一点,事实上你没有提取 Perl 认为是数字的东西。向我们展示一个包含输入数据的完整示例,这样我们就不必猜测了。
猜你喜欢
  • 2012-05-21
  • 2021-03-10
  • 2011-11-25
  • 1970-01-01
  • 2018-02-15
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多