VBAで倍精度浮動小数点型の小数点計算する際の対処

この記事は弊社の作業備忘録として掲載しています。

VBAで変数1と変数2をそれぞれ倍精度浮動小数点型で指定し、小数点計算をしようとすると以下のような不具合が出る。

不具合例

それぞれ消費税計算の要領で小数点計算をし、計算結果の「整数部分だけ」を取り出す(つまり全て小数点以下切り下げ)という計算をしようとすると・・・

変数1=192、変数2=25.50 で、消費税率10%として消費税計算をした場合

Int(192 * 25.50 * 10 / 100) =490  ・・・ 本当は489にならなければならない

変数1=3000、変数2=1.70で、消費税率10%として消費税計算をした場合

Int(3000 * 1.70 * 10 / 100) =509 ・・・本当は510にならなければならない

解決(対応)策・・・CDec関数を使う

Decimal型の変数を使えば対応できるがVBAではDecimal型の変数というのを宣言できない。

その代わりに「CDec()」という関数が用意されていて、「CDec(数値)」と書くとDecimal型の変数として数値を返してくれる。

この結果、例えば上記の不具合事例はどちらも

Int(CDec(192 * 25.50 * 10 / 100)

Int(CDec(3000 * 1.70 * 10 / 100)

と書くことで、正しい結果が得られる