切り捨て
intを使います。また、POSIXにfloorというのが用意されています。intとfloorの違いは対象が負の値の時の動きで、intは絶対値が小さくなる方向に、floorは値が小さくなる方向に値を変更します。
小数点以下を切り捨てる場合にはそのままintを使い、小数点以下n桁を残して切り捨てる場合には10のn乗をかけてからintを使い10のn乗で割ります。
対象が負数の場合にはいきなりintを使うと切り上げになってしまうので、-1してからintを使います(あるいはPOSIX::floorを使います)。
use POSIX qw(floor); $foo = int(-10.5); # -10 $bar = floor(-10.5); # -11
# 自作関数 $hoge = trunc(198.25, 0); # $hoge = 198 $fuga = trunc(198.25, 1); # $fuga = 198.2 $piyo = trunc(198.25, -1); # $piyo = 190 $minus = trunc(-198.25, 1); # $minus = -198.3 sub trunc { my $val = shift; # 切り捨てる数 my $col = shift; # 小数点以下のどこまで残すか my $r = 10 ** $col; if ($val > 0) { return int($val * $r) / $r; } else { my $tmp = $val * $r; if ($tmp == int($tmp)) { return $tmp / $r; } else { return int($tmp - 1) / $r; } } }
関連項目
・int関数・切り上げ
・四捨五入