トップ > Perl Tips > 小数の四捨五入の仕方


 ■ 小数の四捨五入の仕方

一番簡単なのはsprintfを使って四捨五入する方法です。

<使用例>
$pi=3.1415926;
$round=sprintf("%.2f",$pi);
print $round;

<結果>
「3.14」と表示されます。

<解説>
sprintf("%.*f",四捨五入する小数)
*には、小数点以下の桁数を指定してください。
上の例の場合、小数点以下3桁を四捨五入して、小数点以下2桁の数にしますので、
*には2を入れます。


しかし、sprintfを使う場合、Perlのバージョンによっては、
小数点以下3桁で丸めると正常にできないことがあります。
その場合は以下の方法で四捨五入をします。

<サンプル>


#!/usr/bin/perl

$n=2.345; #四捨五入する数
$x=100; #四捨五入する桁数(小数点以下○桁のとき、10の○乗 ex.小数点以下2桁:$x=100)

#四捨五入の処理
$n *= $x; #手順1
$p = int($n); #手順2
$q = $n - $p; #手順3
$q *= 10; #手順4
if ($q >= 5) { $p += 1; } #手順5
$n = $p / $x; #手順6

print "Content-type:text/html\n\n";
print $n;



<解説> [ ]内は2.345を四捨五入するときの途中経過です。
四捨五入の手順説明(番号はスクリプト内の番号と一致)
1.四捨五入する数に$x($xの説明はスクリプト参照)をかける。[$n=2.345*100=234.5]
2.1で求めた数の小数点以下を切り捨てる。[$p=234]
3.1で求めた数から2で求めた数を引く。[$q=234.5-234=0.5]
4.3で求めた数に10をかける。[$q=0.5*10=5]
5.4で求めた数が5以上の場合、2で求めた数に1を足す。[$q=5より、$p=234+1=235]
6.5で求めた数を$xで割る。[235/100=2.35(四捨五入の最終結果)]

ところで、なぜ四捨五入する数に$xをかけるかわかりますか。
これは、四捨五入後に残る桁の数字を整数部分に持ってきて[上記スクリプトの場合は234(小数点以下2桁目まで)]、
それ以下の桁の数字を小数部分に持ってきます[上記スクリプトの場合は5(小数点以下3桁目以降)]。
そうすると、小数点以下1桁目に5未満か5以上かを判断する数[上記スクリプトの場合は5]が出てきます。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/62