切り上げ・四捨五入を正しく行う

金額計算などで切り捨て・切り上げ・四捨五入を行うことがあると思います。

切り捨てはFix関数を使用すればOKです。

しかし、切り上げ・四捨五入に関してはちょっとした注意が必要だったりします。

サンプル(32bit)

Private Function RoundDown(curNum As Currency) As Currency

    '切り捨て
    RoundDown = Fix(curNum)

End Function

Private Function RoundUp(curNum As Currency) As Currency

    '切り上げ
    RoundUp = Int(Abs(curNum) * -1) * (Sgn(curNum) * -1)

End Function

Private Function RoundOff(curNum As Currencye) As Currency

    '四捨五入
    RoundOff = Fix(curNum + (0.5 * Sgn(curNum)))

End Function

サンプル解説

まずは簡単な四捨五入から。

  1. Sgn関数を利用して引数の符号にあわせて0.5を足したり引いたりします。
  2. FIX関数で小数部を切り捨ててます。

次に切り上げです。
Int関数は負数の場合は切り上げる性質を利用しています。

  1. Abs関数で絶対値にしてから-1をかけて値を必ず負数にしています。
  2. 負数にしたらInt関数で切り上げてもらいます。
  3. あとはSgn関数を利用して元の符号に戻しています。

上記の手順で切り上げを実現しています。



【2007年3月28日追記】

引数をCurrency型にしていない場合、精度の問題で結果が希望と異なる場合があったため変更しました。


[ Window Close ]