dyno2316 ロヒミフ perl VBA Excel 秀丸

四捨五入


$a=2.345;
$round=sprintf("%.2f",$a);
print $round."\n";

# 上記実行結果は「2.34」になってしまう
#Active Perl v5.10.0 built for MSWin32-x86-multi-thread
#Binary build 1005 [290470] Built May 24 2009 12:17:36

# そこで以下のような四捨五入を思いつくが

$n=2.345; #四捨五入する数
$x=100; #10の四捨五入する桁数乗
#(小数点以下 n桁で四捨五入のとき、10のn乗)
$n *= $x; #整数にするために $x倍する
$p = int($n); #不要な小数点以下をカット
$q = $n - $p; #小数点以下の差を求める3
$q *= 10; #上記の差を10倍して整数化する
if ($q >= 5) { #整数化後の数値が5より大の場合は+1
$p += 1;
}else{
print "\$qは5未満 ".sprintf("%.19f", $q )."\n";
}
$n = $p / $x; #整数化したものを、$xで割り四捨五入後の数値とする
print $n."\n";


# これでもダメなので 正確な四捨五入が必要な場合
# Math::Round::nearest (CPANモジュール)を使う
use Math::Round;
$b=2.345;
$round2=nearest(.01, $b); # 「.01」が小数点以下2桁
print $round2."\n";