10進値を保持する文字列があり、その文字列を浮動小数点変数に変換する必要があります。したがって、私が持っている文字列の例は「5.45」であり、それに.1を追加できるように同等の浮動小数点が必要です。インターネットで検索しましたが、文字列を整数に変換する方法しかわかりません。
回答:
変換する必要はまったくありません。
% 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"
44ではなく45である必要がありますか?そうしないと、結果の「.5」がどこから来たのか
グーグルは、フィルが尋ねたのと同じ質問(フロートの並べ替え)を検索しているときに私をここに導いてくれたので、スレッドが少し古いにもかかわらず、答えを投稿する価値があると思いました。私はperlに不慣れで、まだ頭を抱えていますが、brian dfoyの声明「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)を(ab)使用して、$ valが数値として扱われるようにしました。
int()
「(乱用)使用」されています。とった。
Perlには、実際には、スカラー、配列、ハッシュの3つのタイプしかありません。そして、その区別でさえ議論の余地があります。;)各変数の処理方法は、変数の処理方法によって異なります。
% perl -e "print 5.4 . 3.4;"
5.43.4
% perl -e "print '5.4' + '3.4';"
8.8
比較すると、スカラーが文字列の数である場合に違いが生じます。そして、それは常に決定可能であるとは限りません。perlが「科学的」記数法でfloatを取得し、比較のために同じ数行を使用したケースを報告できます。
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を数値として扱ったことに気付いた後。
2つのハッシュをData::Dumper
。と比較しようとしているときに、これに気づきました。