かつて、AccessのRound関数は、厳密には四捨五入じゃないと紹介しました。
さて、今度はAccessVBAでの切り捨てのお話。
よく、仕様で小数点第○位で切り捨てなんてことが書かれています。
COBOLのときは、9V99999...に送ってやると切り捨てられたものですが、
(切り捨てられましたよね。たぶん・・・・)
VBAではどうやるのだろう??
その答えです。
[0回]
簡単に言うと、Fix関数を使います。
たとえば、小数点13位で切り捨てをやってみましょう。
Dim A As Double
Dim B As Double
Dim C As Double
A = 8
B = 9
C=A/B
では、0.8888888888888888・・・・のはずです。
これをCOBOLの感覚で、
C = Val(Format(A / B, "0.0000000000000"))でやってしまうと、
0.8888888888889となってしまいます。
(そんなやつはいない?でも、最初やってしまったのです。私は・・・)
で、どうするか。先ほど書いたFix関数で
C = Fix((A/B) * 10000000000000#) / 10000000000000#
(#は勝手についてしまう。何の意味?)
で、結果は
0.8888888888888
となるはず。
で、ついでに小数点以下切り捨てする場合。
COBOLの感覚で、
Dim A As Double
Dim B As Double
Dim C As Integer
A = 8
B = 9
C=A/B
とやってしまうと、
1
になってしまいます。
そうです。勝手に丸められるのですね。
やはりこの場合もFix関数を使って
C= Fix(A / B)
としなくてはいけません。
結果は 0となるはずです。
まだCOBOLの感覚が抜けきれない私でした・・・・。
PR