2012年5月31日木曜日

Accessのデータ型自動変換に注意

ある日のAccessによるプログラム開発 単体テストにて。
どうしても机上でわからないバグが発生。


===========================
Public Sub test()
   
    Dim intNum As Integer
   
    intNum = 999 / 10
    Debug.Print intNum

End Sub
===========================



ステップ実行してみて驚愕の事実。。

下のプログラムを実行すると、当然 99のはずだと思った。
JavaやC言語ならば、 999 / 10 は 恐らく doubleなど包含するデータ型に変換されて計算され、最後に左辺に代入されるときに、然るべきデータ型(今回はinteger)にキャストされるはず。。

しかし、Accessが返した答えは なんと 「100」。
Accessのバグだぁ!!と思って調べてみると、例によって仕様らしい。



http://office.microsoft.com/ja-jp/access-help/HA001229018.aspx

超抜粋
 【データ型変換関数】
 CInt     整数型 (Integer)     -32,768 ~ 32,767。小数点以下は四捨五入されます。


integer型へのキャスト処理は四捨五入するのが仕様だということらしい。
恐ろしい。



で、対処としては、これでいいらしい。

    intNum = int(999 / 10)


気を付けようと、ものすごく思った。


0 件のコメント:

コメントを投稿