[英]How can I convert a string to a number in Perl?
我有一個包含十進制值的字符串,我需要將該字符串轉換為浮點變量。 所以我擁有的字符串的一個例子是“5.45”,我想要一個等價的浮點數,這樣我就可以將 .1 添加到它。 我在互聯網上搜索過,但我只看到如何將字符串轉換為整數。
您根本不需要轉換它:
% 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 更關心動詞而不是名詞。” 以上真是一針見血。 在應用排序之前,您不需要將字符串轉換為浮點數。 您需要告訴排序將值排序為數字而不是字符串。 IE
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 is string 無法轉換為數字,您將收到錯誤消息,並且 $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
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
沒有被解釋為數字,例如從$line
檢索到的"2e-77"
。 添加 0(或 0.0 對於優秀的 ole C 程序員)有幫助。
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
進行比較時注意到了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.