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

Converting a string to float in Perl

我是 Perl 新手。我正在使用 Perl 读取 CSV 文件。 CSV 的第一列是时间(它是一个浮点数)。我已经阅读了 CSV 并成功显示了 CSV 的内容。此外,我希望使用 CSV 数据进行一些计算。我需要时间列作为数组(或任何数据结构)。在读取时间列并将其存储在数组中时,它存储为字符串。我希望有一个用于算术计算的数值数组。

我尝试使用 sprintf 添加 0,mul 1,然后将其存储在数组中,但我遇到了错误。

use v5.30.0;
use strict;
use warnings;

my $file = $ARGV[0] or die;
open(my $data, '<',$file) or die;
my @timeArray;

while(my $line = <$data>){
    chomp $line;
    my @words = split ",",$line;
    #my $temp=$words[1]*1;
    my $temp=sprintf "%.6f",$words[1];
    push @timeArray,$temp;
}

错误:

Argument ""67.891947295"" isn't numeric in multiplication (*) at 3.pl line 12, <$data> line 19556.

and 

Argument ""67.840034174"" isn't numeric in sprintf at 3.pl line 13, <$data> line 19555.

另外,为什么参数在 "" "" 中。

使用适当的模块处理这样的数据是个好主意,因为有几个重要的细节您没有注意。示例:

  • 列值可以用引号引起来
  • 第一行可能包含每列的 header 个名称
  • 文件中的最后一条记录可能有也可能没有结束换行符
  • 等等

阅读 RFC-4180 文档了解更多信息。

有很多模块可以解析CSV格式,例如:Text:CSV。它非常容易安装,当您使用它时,您的 string to double 问题就会消失。