Perlで四捨五入を実装する

四捨五入関数が無い

小数点以下を四捨五入するには、PHPならround()関数で対応できますが、Perlにはそういう標準関数はありません。 では、どうするか。自前で用意しましょう!

小数点部分を取り出して、0.5以上か否かを条件分岐して、それから1足して、、、、なんてしなくていいんです。 実は、0.5を足して小数点以下を切り捨てるだけでOKなんです。

my $data = 1234.5;
print int($data+.5); # 1235と出ます。

my $data = 1234.4;
print int($data+.5); # 1234と出ます。

もちろんPHPでも仕組みは同じです。PHPではint()の代わりにfloor()で切り捨てができます。

$data = 1234.5;
echo floor($data+.5); # 1235と出ます。

$data = 1234.4;
echo floor($data+.5); # 1234と出ます。

なぜこんなことで四捨五入に対応できてしまうのか、布団の中でよく考えてみてください。
なんでもかんでも用意された物に頼るより、ある物で工夫すると新しい気付きがあって楽しくなってきませんか?

税抜き計算時のint()

ちなみに余談ですが、税込価格を税抜き価格にするために「金額÷1.08」などとしますが、この時に注意すべきことがあります。

# Perl
print int(540/1.08); # → 500じゃなく499になってる!
# PHP
echo floor(540/1.08); # → 500じゃなく499になってる!

こんな感じで、小数点が出たら一応切り捨てる処理をいれていると、1円ずれることがあります。 これも、以下のように小数点以下を四捨五入してしまえばちゃんとなります。

# Perl
print int(540/1.08+.5); # → 500
# PHP
echo floor(540/1.08+.5); # → 500

ご参考まで。