• ベストアンサー

文字列の比較

初歩的なことかも知れませんが教えてください。 VB6です。 通常テキストボックスの数字を比較する時、string型なので数字に変換して比較する必要があると思います。 が、数字に変換するのを忘れてそのまま比較した所おかしなところがありました。 VBでは自動的に数字として変換してくれるのかと思っていたのですが何故このような事になるのでしょうか? <例> 1. int(100) > int(99)  結果:TRUE 2. cstr(99) cstr(98) 結果:TRUE 3. cstr(100) > cstr(99) 結果:FALSE 1番と2番は納得が出来ますが、3番は何故?

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

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

一文字目から見ているのでは? "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 の順番となります。

lasichi
質問者

お礼

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

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

数値の比較でテキストボックスの内容が数字に限定されているなら 数値型の変数に格納して比較したほうがいいように思います dim nText1 as Integer, nText2 as Integer nText1 = Text1.Text nText2 = Text2.Text として nText1とnText2を比較すればいいと思います Integerの範囲で収まらないようならば LongやSingleまたはDoubleなどを使いましょう

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは 横からごめんなさい。#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'(ゼロ)を返します。

lasichi
質問者

お礼

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

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

>3. cstr(100) > cstr(99) 結果:FALSE "100" と"99" の比較 "100"の左1文字目="1" "99" の左1文字目="9" "1">"9" 結果:FALSE

lasichi
質問者

お礼

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

関連するQ&A

専門家に質問してみよう