なにぬねのーつ

No.2 LotusScript - 接尾辞早見表
2009/08/02 Notes, LotusScript
コンパイル時にこんなエラーメッセージが出たことはありませんか?
O008 オーバーフローしました。
例えば、以下のスクリプトです。
Dim MegaByte As Long
MegaByte = 1024*1024
こういうメッセージが出る場合もあります。
I008 定数式が不正です。
定数宣言(Const)に置き換えてもメッセージが変わるだけでやはりエラーになります。
Const MegaByte = 1024*1024
うーん、面倒っちいので MegaByte = 1000000 でいいや…なーんてやってませんか?

解決方法

これを回避するためには定数のおしりに接尾辞"&"を付けます。これは定数を長整数型(Long)で明示的に宣言するという意味です。
Dim MegaByte As Long
MegaByte = 1024&*1024&
代入先の変数を長整数型で宣言しているのにこのようなエラーが出るのでしょうか?
1024は整数型(-32768〜32767)の範囲に収まる値です。よって整数型になります。1024*1024は整数型同士の掛け算になりますが演算結果は1048576です。整数型に収まらないのでフローするわけです。代入先が長整数型であろうとなかろうと関係はありません。それ以前に発生するのですから。これはVB系ならではの仕様です。Java等のC言語系では起こりません。

蛇足ですが、ギガバイト(1024*1024*1024=1,073,742,824)までは長整数型(Long)で大丈夫ですが、テラバイトになるともういけません。Currency型(8バイト整数型)を使う必要があります。これには接尾辞"@"を使います。
Dim TeraByte As Currency
TeraByte = 1024@*1024@*1024@*1024@
Double型(倍精度浮動小数点型)を使っても構いませんが、有効桁数はCurrency型より少なく精度が落ちます。
逆にDobule型を使わなければいけないケースもあります。922テラ(838テラバイト)までならCurrency型で表現できますが、テラの上のペタ(Peta)になるとDouble型を使うしかありません。これには接尾辞"#"を使います。
Dim PetaByte As Double
PetaByte = 1024#*1024#*1024#*1024#*1024#
詳しくは以下のデータ型接尾辞早見表を参考にしてください。

データ型接尾辞早見表

デザイナーヘルプより抽出しまとめたもの。LotusScriptでは"接尾辞"ですが、VB系では"型宣言文字"と呼ばれます。

接尾辞 型宣言 名称 サイズ
(Byte)
値の範囲
$ String 文字型 2/文字 文字列の長さは 0〜32K
なし Byte バイト型 1 0〜255
% Integer 整数型 2 -32,768〜32,767
& Long 長整数型 4 -2,147,483,648〜2,147,483,647
@ Currency 通貨型 8 -922,337,203,685,477.5807〜922,337,203,685,477.5807
! Single 単精度浮動小数点数型 4 -3.402823E+38〜3.402823E+38
# Double 倍精度浮動小数点数型 8 -1.7976931348623158+308〜1.7976931348623158+308
なし Boolean 論理型 2 True(-1), False(0)

追記

このケースに限っては接尾辞ではなく"べき乗"を使うという手もあります。
Const PetaByte = 1024 ^ 5

関連情報:

使用条件・免責事項




[戻る]