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