7

Perlで文字列を数値に変換するにはどうすればよいですか?

例:

$str = '10.0500000';
$number = $str * 1;  # 10.05

1を掛ける代わりに、「10.0500000」から10.05を取得する別の標準的な方法はありますか?

4

4 に答える 4

11

編集2020:答えは間違っています。以下のコメントを参照してください。承認された回答を削除することは許可されていません。


私は文字通りの質問に答えています。おそらく、表示用に数値をフォーマットしたいと思うでしょう。

両方の式

sprintf '%.2f', '10.0500000'
sprintf '%.2f', 10.0500000

文字列を返します10.05

于 2012-05-14T12:41:51.010 に答える
9

Perlでは、スカラーは型指定されていません。代わりに、演算子はです。したがって、文字列として$a . "1"使用する場合と、数値として使用する場合があります。Perlは、与えられた操作に対してスカラーが何を意味するかを理解するために最善を尽くします。したがって、ほとんどの場合、「変換」は暗黙的に行われます。$a$a + 1$a

文字列が実際に変換できることを確認する必要がある場合は、正規表現を使用してください。

これを行う方法に関する1つの談話があります:http://www.regular-expressions.info/floatingpoint.html

于 2012-05-14T12:32:28.177 に答える
6

ええと、あなたも0を追加することができます:-)

奇妙なことをしているのでない限り、Perlでのスカラーの内部表現についてはあまり気にしないでください(そうであれば教えてください)。数字のように見えるものは何でも数字です。

または、文字列が「実数」であるかどうかを確認する必要がありますか?ええと、実際には、どんな文字列もそうです。素敵な記事がありますそれは このトピックに関する数字ですか。オリジナルがから削除されているため、そのリンクはWaybackMachineperl.comへのリンクです。

于 2012-05-14T12:30:57.890 に答える
3

0+もう少し慣用的です。これは通常、dualvarsのコンポーネントを区別するために使用されます。

$ perl -E'
   system({ "nonexistant" } "nonexistant");
   say 0+$!, ": ", $!;
'
2: No such file or directory

それはあなたが通常しなければならないことではないので、それは奇妙に見えます。数値は、PV、IV、UV、またはNVとして内部に保存されているかどうかに関係なく、数値です。NV(フロート)として保存することを強制する必要はありません。通常、他の場所でのバグのある設計を示しています。

于 2012-05-14T15:40:37.693 に答える