ある日の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 件のコメント:
コメントを投稿