如何将包含数字的字符串转换为Perl中的数字值?
您根本不需要转换它:
% perl -e 'print "5.45" + 0.1;' 5.55
这是一个简单的解决方案:
例1
my $var1 = "123abc"; print $var1 + 0;
结果
123
例2
my $var2 = "abc123"; print $var2 + 0;
结果
0
Perl是一种基于上下文的语言.根据您提供的数据,它无法正常工作.相反,它会根据您使用的运算符以及使用它们的上下文来确定如何处理数据.如果你做数字的事情,你会得到数字:
# numeric addition with strings: my $sum = '5.45' + '0.01'; # 5.46
如果你做各种各样的字符串,你会得到字符串:
# string replication with numbers: my $string = ( 45/2 ) x 4; # "22.522.522.522.5"
Perl主要指出要做什么,这是最正确的.另一种说法相同的方式是Perl更关心动词而不是名词.
你想做点什么而且不行吗?
谷歌引导我在这里搜索同样的问题phill问(排序浮动)所以我认为尽管线程有点旧,但是值得发布答案.我是perl的新手,我仍然把头缠在它上面但是brian d foy的声明"Perl更关心的是动词而不是名词." 以上真的击中了头上的钉子.在应用排序之前,您不需要将字符串转换为浮点数.您需要告诉排序将值排序为数字而不是字符串.即
my @foo = ('1.2', '3.4', '2.1', '4.6'); my @foo_sort = sort {$a <=> $b} @foo;
有关排序的更多详细信息,请参见http://perldoc.perl.org/functions/sort.html
据我所知,int()并不是用于指定数据类型的"强制转换"函数,它只是(ab)用于将上下文定义为算术类型.我(ab)过去使用过(0 + $ val)来确保$ val被视为一个数字.
$var += 0
可能是你想要的.但是请注意,如果$ var是字符串无法转换为数字,则会收到错误,$ var 将重置为0:
my $var = 'abc123'; print "var = $var\n"; $var += 0; print "var = $var\n";
日志
var = abc123 Argument "abc123" isn't numeric in addition (+) at test.pl line 7. var = 0