-PR-
解決
済み

変数への数式の代入でオーバーフローします

  • 困ってます
  • 質問No.66874
  • 閲覧数762
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 54% (102/187)

Dim lngDaySec as Long
lngDaySec = 60 * 60 * 24

以上のコードでオーバーフローします。
しかし、2行目を以下のように書き換えると

lngDaySec = Clng(60 * 60) * 24

正常に値が代入されます。
Long型の値の範囲は「-2,147,483,648 ~ 2,147,483,647」
となっており、「60×60×24」は「86,400」だから
範囲を逸脱しているとは思えません。
どうしてオーバーフローするのでしょうか?
そして、Clng関数で回避できるのはなぜなんでしょう?
ひょっとしたらアホな質問をしているのかもしれませんが、
どなたかご回答いただければありがたいです。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

lngDaySec = 60 * 60 * 24
式中の定数(60,60,24)が内部的に整数型(Integer)として扱われているせいです。

特に指定しない限り、VBのコンパイラは式の内容を見て定数の型を適当に設定します。
今回の場合、式中に含まれる全ての数値が32767以下であるため、これは整数型の演算であると判断されてしまったのでしょう。

こういった事態を回避するためには、定数の後ろに#を付けることにより、明示的に長整数型だと宣言してやればいいです。

こんな感じです。
lngDaySec = 60# * 60# * 24#
お礼コメント
k_o_j_i

お礼率 54% (102/187)

早速のご回答ありがとうございます。

>式中の定数(60,60,24)が内部的に整数型(Integer)
>として扱われているせいです
なるほどー。不便ですねー。
左辺を見て判断して欲しい……。
投稿日時 - 2001-04-22 16:32:43
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ