10 進値を保持する文字列があり、その文字列を浮動小数点変数に変換する必要があります。したがって、私が持っている文字列の例は「5.45」で、.1 を追加できるように同等の浮動小数点が必要です。インターネットで検索しましたが、文字列を整数に変換する方法しかわかりません。
9 に答える
まったく変換する必要はありません。
% 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 は名詞よりも動詞を気にするということです。
何かをしようとしていて、それがうまくいかないのですか?
フィルが尋ねた同じ質問(フロートのソート)を検索しているときに、Googleが私をここに導いたので、スレッドが少し古いにもかかわらず、回答を投稿する価値があると考えました。私は perl を初めて使用し、まだ頭を悩ませていますが、brian d foy の声明「Perl は名詞よりも動詞を重視します。」上記は本当に頭に釘を打ちます。並べ替えを適用する前に、文字列を float に変換する必要はありません。値を文字列ではなく数値としてソートするようにソートに指示する必要があります。すなわち
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) 使用されています。$val が数値として扱われるようにするために、過去に (0+$val) を (ab) 使用しました。
$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
Perl には、スカラー、配列、およびハッシュの 3 つのタイプしかありません。そして、その区別でさえ議論の余地があります。;) 各変数がどのように扱われるかは、それをどうするかによって異なります:
% perl -e "print 5.4 . 3.4;"
5.43.4
% perl -e "print '5.4' + '3.4';"
8.8
比較では、スカラーが文字列の数値である場合に違いが生じます。そして、それは常に決定可能であるとは限りません。perl が "scientific" 表記法でフロートを取得し、それを数行以下の比較で使用したケースを報告できます。
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 (または古き良き 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 を数値として扱ったことに気付いた後。
2 つのハッシュを と比較しようとしているときに、これに気付きましたData::Dumper
。