与えられた文字列が数値であるかどうかを判定するのに、型.TryParse() を使う方法がありますが、おなじ数値判定でも型によって結果が異なります。
' 数値判定 For Each x In {"100", "+0", "&HA", "-10.5", "5.", "10e+5", "+∞"} Dim value As Double Console.WriteLine("---- {0}", x) Console.WriteLine("Integer:{0}", Integer.TryParse(x, value)) Console.WriteLine("Decimal:{0}", Decimal.TryParse(x, value)) Console.WriteLine("Double :{0}", Double.TryParse(x, value)) Next
結果
---- 100 Integer:True Decimal:True Double :True ---- +0 Integer:True Decimal:True Double :True ---- &HA Integer:False Decimal:False Double :False ---- -10.5 Integer:False Decimal:True Double :True ---- 5. Integer:False Decimal:True Double :True ---- 10e+5 Integer:False Decimal:False Double :True ---- +∞ Integer:False Decimal:False Double :True
- 整数はどれも成功ます。
- 符号つきの 0 も成功します。
- 16進数表現は失敗します。
- 小数点が入ると、整数型は Parse に失敗します。"5."のようにケースも不可です。
- 指数表現と無限大は浮動小数点型のみ成功します。
なので、文字列を数値として評価する場合、上記を考慮してどの型の Parse を使うかを検討するとよいかもしれません。(小数点を許容するが、指数表現は認めたくないなら、Decimal を使用するなど)