Perlで文字列を数値に変換するにはどうすればよいですか?
例:
$str = '10.0500000';
$number = $str * 1; # 10.05
1を掛ける代わりに、「10.0500000」から10.05を取得する別の標準的な方法はありますか?
Perlで文字列を数値に変換するにはどうすればよいですか?
例:
$str = '10.0500000';
$number = $str * 1; # 10.05
1を掛ける代わりに、「10.0500000」から10.05を取得する別の標準的な方法はありますか?
編集2020:答えは間違っています。以下のコメントを参照してください。承認された回答を削除することは許可されていません。
私は文字通りの質問に答えています。おそらく、表示用に数値をフォーマットしたいと思うでしょう。
両方の式
sprintf '%.2f', '10.0500000'
sprintf '%.2f', 10.0500000
文字列を返します10.05
。
Perlでは、スカラーは型指定されていません。代わりに、演算子はです。したがって、文字列として$a . "1"
使用する場合と、数値として使用する場合があります。Perlは、与えられた操作に対してスカラーが何を意味するかを理解するために最善を尽くします。したがって、ほとんどの場合、「変換」は暗黙的に行われます。$a
$a + 1
$a
文字列が実際に変換できることを確認する必要がある場合は、正規表現を使用してください。
これを行う方法に関する1つの談話があります:http://www.regular-expressions.info/floatingpoint.html
ええと、あなたも0を追加することができます:-)
奇妙なことをしているのでない限り、Perlでのスカラーの内部表現についてはあまり気にしないでください(そうであれば教えてください)。数字のように見えるものは何でも数字です。
または、文字列が「実数」であるかどうかを確認する必要がありますか?ええと、実際には、どんな文字列もそうです。素敵な記事がありますそれは
このトピックに関する数字ですか。オリジナルがから削除されているため、そのリンクはWaybackMachineperl.com
へのリンクです。
0+
もう少し慣用的です。これは通常、dualvarsのコンポーネントを区別するために使用されます。
$ perl -E'
system({ "nonexistant" } "nonexistant");
say 0+$!, ": ", $!;
'
2: No such file or directory
それはあなたが通常しなければならないことではないので、それは奇妙に見えます。数値は、PV、IV、UV、またはNVとして内部に保存されているかどうかに関係なく、数値です。NV(フロート)として保存することを強制する必要はありません。通常、他の場所でのバグのある設計を示しています。