我有一个包含十进制值的字符串,我需要将该字符串转换为浮点变量。因此,我拥有的字符串的示例为“ 5.45”,我想要一个等效的浮点数,因此可以向其添加.1。我已经在互联网上进行搜索,但是只看到如何将字符串转换为整数。
Answers:
您根本不需要转换它:
% perl -e 'print "5.45" + 0.1;'
5.55
[rabdelaz@Linux_Desktop:~/workspace/akatest_5]$perl -e 'print "nope\n" unless "1,000" > 10;' nope [rabdelaz@Linux_Desktop:~/workspace/akatest_5]$perl -e 'print "nope\n" if "1,000" > 10;'
这是一个简单的解决方案:
例子1
my $var1 = "123abc";
print $var1 + 0;
结果
123
例子2
my $var2 = "abc123";
print $var2 + 0;
结果
0
foreach my $i ('00'..'15')
并且需要在某些地方删除前导零。这种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比名词更关心动词。
您是否正在尝试做某事,但是它不起作用?
x
是字符串复制操作。
my $string = ( 45/2 ) x 3; # "22.522.522.5"
45而不是44?否则,我不会知道结果中的“ .5”来自哪里……
Google在搜索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)使用(0 + $ val)以确保将$ val视为数字。
int()
正在“滥用”;得到它了。
Perl实际上只有三种类型:标量,数组和哈希。甚至这种区别也是有争议的。;)处理每个变量的方式取决于您对它的处理方式:
% perl -e "print 5.4 . 3.4;"
5.43.4
% perl -e "print '5.4' + '3.4';"
8.8
相比之下,标量是字符串的数字会有所不同。而且并非总是可以决定的。我可以报告一种情况,其中perl以“科学”表示法检索了一个浮点数,并在下面的比较中使用了以下几行:
use strict;
....
next unless $line =~ /and your result is:\s*(.*)/;
my $val = $1;
if ($val < 0.001) {
print "this is small\n";
}
并且这里$val
没有被解释为数字,例如"2e-77"
从中检索$line
。加0(或对于优秀的ole C程序员为0.0)会有所帮助。
Perl是弱类型的,是基于上下文的。根据您使用的运算符,许多标量都可以视为字符串和数字。
$a = 7*6; $b = 7x6; print "$a $b\n";
你得到42 777777
。
但是,存在细微的差异。当您将数字数据从文本文件读取到数据结构中,然后使用进行查看时Data::Dumper
,您会注意到您的数字被加了引号。Perl在内部将它们视为字符串。
阅读:$my_hash{$1} = $2 if /(.+)=(.+)\n/;
。
倾倒:'foo' => '42'
如果要在转储中使用未加引号的数字:请
阅读:$my_hash{$1} = $2+0 if /(.+)=(.+)\n/;
。
倾倒:'foo' => 42
在$2+0
Perl注意到您将$ 2视为数字之后,因为您使用了数字运算符。
我在尝试与比较两个哈希值时注意到了这一点Data::Dumper
。