- 締切済み
少数点以下の桁数について
printした時の表示を0.33とか0.333とか小数点以下の桁数表示を コントロールしたいのですが、どなたか教えて下さい。 ---------------------- $a=10/3; print $a;
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- W_H
- ベストアンサー率47% (21/44)
一応、個人的にはprintfをお勧めしますが、四捨五入とかが絡んできたら、自分で関数を作らなくてはいけません。 四捨五入関係の処理はしてませんが、自作関数でprintfと同じことをやってみます。 $a=10/3; $a=&num($a,3);#(数字,小数点以下の桁数) print $a; sub num{#数字調整関数 my($n,$f)=@_; $n=int($n*(10**$f)); $n/=(10**$f); return $n; } 考え方は、10/3=3.333333……に、10の[桁]乗します。例えば三桁なら、[10]の[3]乗になるので、[1000]をかけ、3333.333……とします。 そこでint関数で、小数点以下を切捨て(四捨五入ではない)3333として、最後に掛けた数(10の3乗)で割ってやると、3.333となります。 四捨五入が入ると、もう少しややこしくなりますが、そこら辺はほっておきます。面倒くさいので。 他にもいろいろやり方がありますが、まずはprintfでやって、余裕が出てきたら、自作関数にも挑戦してみてください。ちなみに、printfも確か必要じゃない数字は切り捨てです。切り上げや四捨五入がしたい場合は、自作しましょう。
- sakusaker7
- ベストアンサー率62% (800/1280)
printf で書式指定というのはいけないのですか? use strict; use warnings; my $var = 10/3; print $var, "\n"; $# = '%.3f'; print $var, "\n"; 実行結果: Use of $# is deprecated at moge.pl line 6. 3.33333333333333 3.333 できますが、メッセージにある通り非推奨な機能です。
- jjon-com
- ベストアンサー率61% (1599/2592)
$a=10/3; printf("%.2f\n", $a); printf("%.3f\n", $a); 以下,http://www.rfs.jp/sb/perl/05/printf.html より抜粋↓ %n.mf 小数点付き数値の10進展開。nは文字列の長さ、mは少数点以下の桁数を指定。