tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルisNumber と isDigit の差について
記事No855
投稿日: 2004/05/21(Fri) 15:17
投稿者boar
[OSのVer]:WindowsXP     [VBのVer]:VB.NET

お世話になります。

文字が数字がどうか判定するメソッドに、isNumber と isDigit があり、
これらは MSDN にて

・isNumber:いずれかの数値 Unicode カテゴリに属するかどうかを判断
・isDigit:基数 10 の数字かどうかを判断

と説明されておりますが、この内容が理解できず、
適当に文字を与えて比較してみても、
動作にどの様な差があるのか理解できませんでした。

具体的にどの様に使い分ければ良いのか、ご教示願えないでしょうか。

[ツリー表示へ]
タイトルRe: isNumber と isDigit の差について
記事No857
投稿日: 2004/05/23(Sun) 12:18
投稿者NAO★
isNumber は 0〜9 と (16進数の)A〜F を数値とみなします。
isDigit は 10進数の 0〜9のみを数値とみなします

[ツリー表示へ]
タイトルRe^2: isNumber と isDigit の差について
記事No858
投稿日: 2004/05/24(Mon) 10:40
投稿者boar
[OSのVer]:WindowsXP [VBのVer]:VB.NET
ご返答、有り難うございました。

> isNumber は 0〜9 と (16進数の)A〜F を数値とみなします。
> isDigit は 10進数の 0〜9のみを数値とみなします

IsNumber に16進数として認識できる文字を渡して
実行したところ、結果は Flase でした。

例:Char.IsNumber("1A", 1)

考え方に何か誤りがあるのでしょうか。

[ツリー表示へ]
タイトルRe^3: isNumber と isDigit の差について
記事No859
投稿日: 2004/05/24(Mon) 19:47
投稿者魔界の仮面弁士
もしかしたら、boarさんの尋ねている「isNumberメソッド」と、
NAO★さんの答えている「isNumberメソッド」は、別物なのかも。

> IsNumber に16進数として認識できる文字を渡して
> 実行したところ、結果は Flase でした。
> 例:Char.IsNumber("1A", 1)

上記は「(0から数えて)1文字目の文字が、数値かどうか」を返します。

つまり、
  Char.IsNumber("1AB2", 0) → 「1」は数値なので「True」
  Char.IsNumber("1AB2", 1) → 「A」は非数値ゆえ「False」
  Char.IsNumber("1AB2", 2) → 「B」は非数値ゆえ「False」
  Char.IsNumber("1AB2", 3) → 「2」は数値なので「True」
って感じで。

[ツリー表示へ]
タイトルRe^4: isNumber と isDigit の差について
記事No860
投稿日: 2004/05/26(Wed) 09:59
投稿者boar
[OSのVer]:WindowsXP [VBのVer]:VB.NET
ご返答、有り難うございました。
  
> もしかしたら、boarさんの尋ねている「isNumberメソッド」と、
> NAO★さんの答えている「isNumberメソッド」は、別物なのかも。
自分が考えている他にも、IsNumberメソッドが存在するのでしょうか。
引数が Char型と String型のどちらを試しても、結果は False でした。

Char.IsNumber("A"c)
Char.IsNumber("1A", 1)

IsDigitメソッドでも同様の結果です。
これらのメソッドの違いは、深く考えない方が良いのでしょうか。

[ツリー表示へ]
タイトルRe^5: isNumber と isDigit の差について
記事No862
投稿日: 2004/05/26(Wed) 11:57
投稿者花ちゃん
詳しい解説は、できませんが、他のことで調べていたら下記が目についたので

以下ヘルプの使用例のところ(MSDN)より抜粋

Char.IsDigit メソッド  
このメソッドは、 Char が基数 10 の数字かどうかを判断します。
これは、 Char がいずれかの数値 Unicode カテゴリに属するか
どうかを判断する IsNumber とは対照的なメソッドです。

文字列の文字位置には、0 から始まるインデックスが付けられます。

有効な数字は、 UnicodeCategory のカテゴリ DecimalDigitNumber のメンバです。



Char.IsNumber メソッド
このメソッドは、 Char がいずれかの数値 Unicode カテゴリに属するかどうかを
判断します。これは、 Char が基数 10 の数字かどうかを判断する IsDigit とは
対照的なメソッドです。

文字列の文字位置には、0 から始まるインデックスが付けられます。

有効な数値は、 UnicodeCategory のカテゴリ DecimalDigitNumber 、
LetterNumber 、または OtherNumber のメンバです。

両方共、DecimalDigitNumber メンバーについては同じようですが
Char.IsNumber メソッド は、LetterNumber 、または
OtherNumber のメンバについても有効と判断するという事では
ないでしょうか?
(UnicodeCategory 列挙体)をご覧下さい。

[ツリー表示へ]
タイトルisNumberとisDigitの違い
記事No866
投稿日: 2004/05/26(Wed) 15:17
投稿者花ちゃん
’V(ブイ)ではなくX(ご で変換した文字(5))

  Debug.WriteLine(Char.IsNumber("X"))    'True
  Debug.WriteLine(Char.IsDigit("X"))     'False

[ツリー表示へ]
タイトルRe: isNumberとisDigitの違い
記事No867
投稿日: 2004/05/26(Wed) 17:11
投稿者boar
[OSのVer]:WindowsXP [VBのVer]:VB.NET

> ’V(ブイ)ではなくX(ご で変換した文字(5))
>
>   Debug.WriteLine(Char.IsNumber("X"))    'True
>   Debug.WriteLine(Char.IsDigit("X"))     'False
確認しました。
Unicodeカテゴリというものをよくわかっていなかったため、
この辺りの違いに気付くことができませんでした。

IsNumber と IsDigit の差を理解することが出来たので、
今後はUnicodeカテゴリの知識も深めようと思います。

今回は本当に有り難うございました。
またよろしくお願い致します。

[ツリー表示へ]