94

10 進値を保持する文字列があり、その文字列を浮動小数点変数に変換する必要があります。したがって、私が持っている文字列の例は「5.45」で、.1 を追加できるように同等の浮動小数点が必要です。インターネットで検索しましたが、文字列を整数に変換する方法しかわかりません。

4

9 に答える 9

95

まったく変換する必要はありません。

% perl -e 'print "5.45" + 0.1;'
5.55
于 2008-11-14T00:43:28.770 に答える
74

これは簡単な解決策です:

例 1

my $var1 = "123abc";
print $var1 + 0;

結果

123

例 2

my $var2 = "abc123";
print $var2 + 0;

結果

0
于 2011-12-16T19:18:03.463 に答える
44

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 は名詞よりも動詞を気にするということです。

何かをしようとしていて、それがうまくいかないのですか?

于 2008-11-14T03:06:57.810 に答える
10

フィルが尋ねた同じ質問(フロートのソート)を検索しているときに、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を参照してください。

于 2010-05-14T16:27:42.280 に答える
9

私が理解しているように、int()はデータ型を指定するための「キャスト」関数として意図されたものではありません。ここでは、コンテキストを算術型として定義するために単に (ab) 使用されています。$val が数値として扱われるようにするために、過去に (0+$val) を (ab) 使用しました。

于 2010-08-25T17:22:26.997 に答える
6
$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
于 2013-07-14T07:58:59.113 に答える
4

Perl には、スカラー、配列、およびハッシュの 3 つのタイプしかありません。そして、その区別でさえ議論の余地があります。;) 各変数がどのように扱われるかは、それをどうするかによって異なります:

% perl -e "print 5.4 . 3.4;"
5.43.4


% perl -e "print '5.4' + '3.4';"
8.8
于 2008-11-14T01:25:45.063 に答える
1

比較では、スカラーが文字列の数値である場合に違いが生じます。そして、それは常に決定可能であるとは限りません。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) を追加すると役立ちました。

于 2012-08-27T13:58:13.040 に答える
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

于 2013-07-30T15:47:38.300 に答える