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

String 在Perl中将字符串转换为浮点,string,csv,perl,floating-point,String,Csv,Perl,Floating Point,我是Perl新手。我正在使用Perl读取CSV文件。CSV的第一列是时间,它是一个浮点值。我已经阅读了CSV并成功显示了CSV的内容。此外,我希望使用CSV数据进行一些计算。我需要时间列作为数组或任何数据结构。读取时间列并将其存储在数组中时,它将存储为字符串。我希望有一个用于算术计算的数字数组 我尝试添加0,mul 1,然后使用sprintf将其存储在数组中,但遇到了错误 use v5.30.0; use strict; use warnings; my $file = $ARGV[0] or

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

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

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.

另外,为什么要使用参数。

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

列值可以用引号括起来 第一行可能包含每列的标题名称 文件中的最后一条记录可能有也可能没有结束换行符 等 有关更多信息,请阅读文档


有很多模块可以解析CSV格式,例如:。它的安装非常简单,当您使用它时,字符串加倍问题将消失。

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

列值可以用引号括起来 第一行可能包含每列的标题名称 文件中的最后一条记录可能有也可能没有结束换行符 等 有关更多信息,请阅读文档


有很多模块可以解析CSV格式,例如:。它很容易安装,当您使用它时,字符串到双引号的问题将消失。

您不显示CSV文件,但该字段看起来是带引号的,并且您没有删除引号。如果您想读取非平凡的CSV数据,请使用Text::CSV_XS,而不是拆分。请您使用Text::CSV_XS编写用于读取CSV的块,我找不到任何好的资源。文档中有一些示例…问题不是将字符串转换为数字,问题是,您拥有的字符串不是数字,因为您没有正确解析CSV。您没有显示CSV文件,但看起来该字段被引用,并且您没有删除引号。如果您想读取非平凡的CSV数据,请使用Text::CSV_XS,而不是拆分。请您使用Text::CSV_XS编写用于读取CSV的块,我找不到任何好的资源。文档中有一些示例…问题不是将字符串转换为数字,问题是,您拥有的字符串不是数字,因为您没有正确解析CSV。Re它很容易安装,…和使用!它很容易安装、使用!