プロが教えるわが家の防犯対策術!

初歩的なことかも知れませんが教えてください。
VB6です。

通常テキストボックスの数字を比較する時、string型なので数字に変換して比較する必要があると思います。
が、数字に変換するのを忘れてそのまま比較した所おかしなところがありました。
VBでは自動的に数字として変換してくれるのかと思っていたのですが何故このような事になるのでしょうか?

<例>
1. int(100) > int(99)  結果:TRUE
2. cstr(99) cstr(98) 結果:TRUE
3. cstr(100) > cstr(99) 結果:FALSE

1番と2番は納得が出来ますが、3番は何故?

A 回答 (4件)

一文字目から見ているのでは?



"100" と "99" の比較

1."1" と "9" を比較(たぶん文字コードで)
 →右辺の方が大きい
 →比較終了


"99" と "98" の比較

1."9" と "9" を比較
 → 同じなので次の文字へ
2."9" と "8" を比較
 →左辺の方が大きい
 →比較終了



数値では 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 21 の順番ですが
文字列では 1, 10, 11, 2, 20, 21, 3, 4, 5, 6, 7, 8, 9 の順番となります。
    • good
    • 1
この回答へのお礼

なるほど。確かにそんな感じですね。
これって仕様ですか?
MSDNとかネットで探したんですがどこにも見つけられなかったんですが。

お礼日時:2009/07/08 15:06

数値の比較でテキストボックスの内容が数字に限定されているなら


数値型の変数に格納して比較したほうがいいように思います

dim nText1 as Integer, nText2 as Integer
nText1 = Text1.Text
nText2 = Text2.Text
として nText1とnText2を比較すればいいと思います

Integerの範囲で収まらないようならば LongやSingleまたはDoubleなどを使いましょう
    • good
    • 2

こんにちは


横からごめんなさい。#1補足です。

>これって仕様ですか?

 文字コードの大小で比較しているからです。VBに限った話しではありません。
 国際標準ISOコード(通常半角と呼んでいる)だと次のようになっています(タイプフェースは書体という意味ですが、フォントといった方が判りやすいかも)。

タイプ
フェース コード
 '0' = &H30
 '1' = &H31
 '2' = &H32
 '3' = &H33
 '4' = &H34
 '5' = &H35
 '6' = &H36
 '7' = &H37
 '8' = &H38
 '9' = &H39

VBのchr$関数で chr$(&H30) とすれば、文字'0'(ゼロ)を返します。
    • good
    • 1
この回答へのお礼

ありがとうございました。すっきりしました。

お礼日時:2009/07/08 17:13

>3. cstr(100) > cstr(99) 結果:FALSE


"100" と"99" の比較
"100"の左1文字目="1"
"99" の左1文字目="9"
"1">"9" 結果:FALSE
    • good
    • 0
この回答へのお礼

ありがとうございました。すっきりしました。

お礼日時:2009/07/08 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています