プロが教えるわが家の防犯対策術!

printした時の表示を0.33とか0.333とか小数点以下の桁数表示を
コントロールしたいのですが、どなたか教えて下さい。
----------------------
$a=10/3;
print $a;

A 回答 (3件)

$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は少数点以下の桁数を指定。
    • good
    • 0

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

できますが、メッセージにある通り非推奨な機能です。
    • good
    • 0

一応、個人的には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も確か必要じゃない数字は切り捨てです。切り上げや四捨五入がしたい場合は、自作しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!