• ベストアンサー

integer型、long型、double型

vb6.0についてお聞きいたします。 こちらの問題は、visual studio 2005のvbでは生じません。 windows xp上で動かしているのですが、どうやら 何もしていないあるパラメータに32000ぐらいの数字よりも大きな 数字をいれるとエラーになってしまいます。 それも、integer型、long型、double型のすべての型で生じます。 そういうものなのでしょうか? HPをいろいろ見ましても、long型で20億ぐらいは 表現できるように書いてあるのですが。

noname#108554
noname#108554

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

  • ベストアンサー
回答No.1

手元のExcel VBA(VB.NET系ではなくVB6系)で実験してみました LongとDouble共に再現しません。 Integerの場合 http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200304_03040036.html >VB6ではIntegerが16bit、Longが32bitでしたが、 NETではIntegerが32bit、Longが64bitに変更されてますので。 割と有名ではあるんですが、Microsoft公式の文書を探すのが面倒くさいので放置。(2^16)/2 - 1 = 32767(正と負があるから。VB6のIntegerは-32768~32767しか取れない) ============================== Option Explicit Sub hoge() Dim a As Long a = 33000 MsgBox (a) End Sub =========================== Option Explicit Sub hoge2() Dim a As Double a = 33000 MsgBox (a) End Sub ===================== Option Explicit Sub hoge3() Dim a As Integer a = 33000 MsgBox (a) End Sub

noname#108554
質問者

お礼

確かにおっしゃるとおり このプログラムをexcelで動かすと 私の言うようにはなりません。(今、自宅で確認しました。) ところが、 ------------------- Sub hoge() Dim a As Double a = 33 * 1000 MsgBox (a) End Sub ---------------- では、オーバーフローします。 しかし、 ---------------- Sub hoge() Dim a As Double a = 33 a=a*1000 MsgBox (a) End Sub ------------------ なら大丈夫なようです。 ※普段はC++ユーザなので、混乱しました。 ありがとうございました。

関連するQ&A

  • ArrayにDouble型の数字を格納

    環境はVisual Studio 2005 Standard Editionです. ArrayにDouble型の数字を格納しようしたら,以下のエラーが表示されました. 型 'System.Double' のオブジェクトを型 'System.Array' にキャストできません。 どのようにArrayを宣言すればよいのでしょうか.よろしくお願いします.

  • 演算子が DBnull 及び integerに対して有効でない

    VB.net 2003で開発したプログラムの動作確認をしたところ開発したコンピュータでは難なく動作したのですが、他のコンピュータに配布したところ、「演算子が 型 DBnull 及び integerに対して有効でありません」とメッセージが表示され動作しません。 動作したコンピュータの環境となにが違うのかもわかりません・・・ このエラーに対して私の試した環境下で考えられる原因がありましたら 教えていただきたいです。よろしくお願いいたします。 動作確認環境はWindows XPです。

  • Double→Integerへの変換で「意図しない変換を防ぐ」

    'もう一質問。頻繁に考えていたこと Class himajin100000 Shared Sub Main Dim hoge As Integer Dim fuga As Double = 5.5 hoge = System.Convert.ToInt32(5.5) System.Diagnostics.Debug.Print(hoge.ToString) hoge = CType(5.5,Integer) System.Diagnostics.Debug.Print(hoge.ToString) 'という変換を防ぎたいです。 'Double値が5.0など、整数として切りの良い数字のときのみ変換したい 'それ以外はプログラマのミスとしてエラーが検出できるように。 'なお、 'hoge = DirectCast(5.5,Integer) 'とか 'hoge = DirectCast(System.Math.Floor(5.5),Integer) 'はエラーが出ます。 '今まで私は, hoge = Integer.Parse(System.Math.Floor(5.5).ToString) System.Diagnostics.Debug.Print(hoge.ToString) 'という風に書いてきました。 'Integer.Parse((5.5).ToString) System.FormatException '何かString型を介している地点で冗長な気がするので 'もっといい方法・わかりやすい方法等があれば教えてください End Sub End Class

  • doubleからfloatへの変換でのトラブル

    double test = 0.01; float test2 = (float)test; このプログラムを実行すると、test2には何故か「0.00999999998」という数字が入ってしまい、「0.01」にはなりません。正確にdoubleからfloatへキャストする方法はあるのでしょうか。 環境はWindows XP、Visual C++です。

  • ダブルクリックしてフォームを表示させたい

    VB2010でフォームにコマンドボタンを設置したのですが このフォームをデスクトップでダブルクリックして使えるようにするにはどうしたらいいでしょう? (デスクトップにショートカットでも大丈夫です) 今は、Microsoft Visual Studio 2010 Expressを立ち上げて、F5を押して、フォームを表示させています。

  • Doubleが返ってくる理由を教えて下さい。

    VBAについて教えて下さい。 セルa1に1と入力して Sub a() MsgBox TypeName(Range("a1").Value) End Sub とすると、Doubleが返ってくるのですが なぜLongや Integerではないのでしょうか? Doubleが一番多くの数字を格納できるデータ型だからでしょうか? (負の値は -1.79769313486231E308 ~ -4.94065645841247E-324 正の値は 4.94065645841247E-324 ~ 1.79769313486232E308 ) よろしくお願い致します。

  • SQL文がDouble型として認識される

    SQL文がDouble型として認識される 質問させて頂きます。 ユーザーのポイントを引き算し、SQLにアップデートするプログラムを組んでいます。 実行すると String "UPDATE 「テーブル名」 SET 「要素名(Integer)」 " から型 'Double' への変換は無効です。 というエラーが出るのですが、SQL文の部分を何故Doubleに変換するのでしょうか? デバッグにて変数を確認し、String等をいれてみても同じエラーが出る上 SQL文は他の部分で正常に動いているものをコピーしても同じエラーが出ます。 INSERT INTO テーブル名(要素) VALUES(xxx)"であれば 「String "INSERT INTO テーブル名(要素) VALUES」 " から型 'Double' への変換は無効です。」 となります。 SQL文の記述が間違っているとは思えず、VBの記述の問題としてここで質問させて頂きました。 コードは以下の通りで、環境はVB2010 + SQL Server2008です。 回答して頂くために不足している情報がありましたらすぐに追記致します。 至らない文章ではありますが、どうかよろしくお願い致します。 Dim point As Integer point = point(Integer型) - price(Integer型) Dim strSQL As String = "UPDATE 「テーブル名」 SET 「要素(Int型)」 = '" + point + "' WHERE UserID = '" + userid(String型) + "'" cn.ConnectionString = My.Settings.ServerURL Dim cmd4 As New SqlCommand(strSQL, cn) cn.Open() cmd4.ExecuteNonQuery() cn.Close()

  • atan2 オーバーロード関数の呼び出しを解決することができません

    はじめまして。 超初心者のものです。 かなり古いMayaのプラグインのソースファイルをコンパイルすることになり、以下のようなエラーが出てどうにも解決することができません。 1>.\MayaMath.cpp(164) : error C2668: 'atan2' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(547): 'long double atan2(long double,long double)' の可能性があります。 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(499): または 'float atan2(float,float)' 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(110): または 'double atan2(double,double)' 大変申し訳ないのですが、こういった場合の回避の仕方 などご存じの方がいましたらよろしくお願いいたします。

  • String""から型'Double'への変換は無効です。 とエラーが出ます。

    こんにちわ。初心者です。よろしくお願いします。 VB2005においてプログラムを実行したところ、 「String""から型'Double'への変換は無効です。」 というエラーが出ます。対処法を教えていただけると助かります。 どうかよろしくお願いします。

  • C/C++の型について

    Windows2000で、VC++6で型のサイズを調べると、以下のとおりでした。 int 4バイト long 4バイト long int 4バイト 環境はWindows2000, CPUはCeleron1200Mhzです。 環境やコンパイラによって型のサイズや呼び方も変わるのでしょうか? VisualBasic6用のDLLをVCで作成した記憶があるのですが、そのときは VB6のInteger型が2バイトだったので C(Ver7.0?????)側も2バイトだったと思います。 今VB6のInteger型にあわせる場合はC側ではshortでないとおかしくなるのでしょうか? 私はブランクがあり、そのあたりの事情がよくわかっていません。 あるサイトのページを見ると intが2バイトで、 long intは同じ4バイトで long long intという型もありました。VC6++では long long intは無いようです。 http://seclan.dll.jp/c99d/c99d05.htm VC2005++やGCCでは8バイトの型はあるのでしょうか?

専門家に質問してみよう