- ベストアンサー
VB6.0での条件文にある#の意味
先人のVB6.0プログラムを解読する作業中に以下の2行目の#の意味がわかりませんでした。 (0以下であればというif文の中に 1以下であればというif文?) 御教示いただければ幸いです。 if kakudo < 0 then if kakudo <= 1# then kai = 180 + kakudo else kai = 180 end if else kai = 0 end if
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
またまた登場、onlyromです。 >duble型と宣言しているのに、また#付きとは。 >この場合は#なくても同じということに・・・? そうです、#はなくてもいいです。 先の回答の Const K As Double = 5000# '#はあっても無くてもいい と同じことです。 要するに ■値を代入するだけ■なら、#はあってもなくてもいいわけですが、 先の回答の例のように計算に使ってる場合は、 #があるないかが重要になってくるわけです。 また、定数をそのまま使う場合は、 定数に#を付けることで宣言部分を見なくても 左辺の変数の型がDouble型というのが分かるというメリットはあるわけですが。。 ただ、これも変数の付け方を定石どおりやれば 変数の型もその変数名を見れば一目で分かります。 先の回答のように、 整数だったら、integerの頭3桁を取り、intData 倍精度だったら、doubleですから、dblData とすれば変数名を見ただけで変数の型は分かりますよね。 ちょとだらだらとした回答になりました。(^^;;;
その他の回答 (4)
- onlyrom
- ベストアンサー率59% (228/384)
またまたまた登場、onlyromです。 当方の回答は、そのコードが正しい云々とは関係なく、 質問のタイトルにある、「条件文にある#の意味」その一点についてです。 コードの正誤は質問者の担当?ということで敢えてそこには言及しませんでした。。。(^^;;; では質問のコードについて。 仰るように間違ったコードですね。 実際は次のようなことだと推測されます。 一行目の if kakudo ■< 0■ then この、<0 は、 >0 のタイプミス(よく言えば)でしょう。 '-------------------------------------------------- If kakudo > 0 then If kakudo <= 1 then kai = 180 + kakudo Else kai = 180 End If Else kai = 0 End if '---------------------------------------------- kakudoが ■0より大きくて1以下■0<kakudo<=1 ・・・・kaiに、kakudo+180を代入 ■1より大■1<kakudo ・・・・kaiに、180を代入 ■0以下■kakudo<=0 ・・・・kaiに、0を代入 尚、IF文でも、#はあってもなくても可です。 それにしても >#が付く事で何かif文の条件が変わるのかと思っていましたが ここが質問の要点だとは想像もしませんでした。 道理でどうも論点がずれているような、 しっくりこないような気がしてたのですが、 それが原因だったのですねぃ。(^^;;;
お礼
最後の方は私の仕事も絡んでしまいました・・ 申し訳ないです。 それにしてもこれだけ親切にご教示いただいたので、 だんだんと解明できそうな気がしてきました。 長々とお付き合い頂きありがとうございました。 またすぐに壁に当たるかもですが・・・
- onlyrom
- ベストアンサー率59% (228/384)
回答2、onlyromです。 回答1さんがお忙しいようなので。。。 >ここで使用している1はdouble型ですよという意味? そうです。 なぜ、定数に#などつけるかというと 次の例を試してみればはっきり理解できるはずです。 '------------------------------------- Private Sub Command1_Click() Dim intData As Integer Dim dblData As Double intData = 30000 dblData = intData + 5000 MsgBox dblData End Sub '------------------------------------- 上記では定数5000に、#が付いてないので dblData = intData + 5000 ここで、オーバーフローのエラーになります。 なぜなら、intDataも5000も整数ですから 計算結果35000は整数の上限32767を超えるからです で、それを避けるために5000に#を付けDoubleにすると 計算結果はDobuleの範囲内ということで上手くいくわけです。 ただ、コード内に定数を直接使うことはあまりないと思われます。 上記のようなことに常に注意しないといけないからです。 で、どうするかというと '------------------------------------------- Private Sub Command1_Click() Dim intData As Integer Dim dblData As Double Const K As Double = 5000# '#はあっても無くてもいい intData = 30000 dblData = intData + K MsgBox dblData End Sub '------------------------------------------- と定数5000を予めDoubleの変数に入れておき、 計算などのときはその変数を使うのが普通です。
補足
早速の回答感謝です。 しかも例があって分かりやすいこと! 理解できてきました。 その後ソースを読み進んでいくと、更に謎な部分が出てきました。 '_______________________________________________ Dim Data As Double Data = 0# '________________________________________________ duble型と宣言しているのに、また#付きとは。 この場合は#なくても同じということに・・・?
- onlyrom
- ベストアンサー率59% (228/384)
以下のサイトなど参考になるでしょう。 データ型を参照 http://www.komonet.ne.jp/~vb/chap4.htm
お礼
ありがとうございました。 以後、参考にします。 今回以外の件でも参考になります。
- AlexSuns
- ベストアンサー率67% (78/115)
ここで使用されている「#」は、型宣言文字です サフィックスと称されます なので、 1# は、 Double型の1です VB6の型宣言文字には、他にも「!(Single)」「$(String)」等があります ぐぐってみるのもいいでしょう コードのほうは・・・
補足
早速の回答ありがとうございます。 すみませんもう少し御教示ください。 1というdouble型の変数を宣言したということでしょうか? それともここで使用している1はdouble型ですよという意味・・・ 同じこと? 混乱してきました。。。
お礼
少し時間が開いてしまいました。 なるほどです。。 私が見ているソースはまさに計算で使用されていますので、 また少し考えます。 それにしても質問の本文に書きましたが、 '_____________________________________ if kakudo < 0 then if kakudo <= 1# then kai = 180 + kakudo else kai = 180 end if else kai = 0 end if '_____________________________________ これの式はメチャメチャですが、if文の条件はそのままなのです。 一つ目のif文だけで2つ目のif文はいらないような気がしてしまいます・・・ #が付く事で何かif文の条件が変わるのかと思っていましたが・・・ 難しいですね・・・