|
■No68676 (じょしゅ さん) に返信
> Dim str As String = txtTanka.Text.Trim()
> Dim num As Integer = CInt(str)
> という形でいいのですよね。
簡易的にはその通りですが、システム設定が日本語になっていることが条件となります。
そもとも Trim せずとも、
Dim num As Integer = CInt(" 1,234 ")
は 1234 を返します。地域設定が「日本」の場合は。
しかし、地域設定がドイツになっている場合、上記は 1 を返すことに注意してください。
日本やアメリカでは、「, で桁区切り」「. が小数点」ですが、
ドイツやスペインは、「. で桁区切り」「, が小数点」だからです。
(他にも、空白で桁区切りする地域などがあります)
地域設定に依存せずに動作させるようにするのであれば、Integer.Parse や Integer.TryParse を用い、
引数に CultureInfo.InvariantCulture のカルチャを指定するのが安全です。
その分コードは冗長的になってしまうので、ケースバイケースで使い分けてみてください。
'Imports System.Globalization
Dim culture As CultureInfo = CultureInfo.InvariantCulture
Dim fmtInteger As NumberStyles = NumberStyles.Integer Or NumberStyles.AllowThousands
Dim num As Integer = Integer.Parse(txtTanka.Text, fmtInteger, culture)
ちなみに上記では、Trim を利用していません。
これは、NumberStyles.Integer に、前後の空白を無視するための指定
(AllowLeadingWhite と AllowTrailingWhite)が含まれているためです。
また、書式エラーなどの事も鑑みるのであれば、Intger.TryParse メソッドを使うのも手です。
あるいは、そもそも正しい入力値しか入れられないようにするために、
TextBox.Text の代わりに NumericUpDown.Value を使うと言う手もあります。
NumericUpDown なら、最小値/最大値も制限できますしね。
--- 以下、蛇足情報として ---
ついでに言うと、『strValue.Trim()』と『Trim(strValue)』とでは、
必ずしも同じ結果を返すわけではありません。
両者は、strValue が Nothing の場合の動作が異なる事に注意してください。
Nothing だった場合、前者(Trim メソッド)は NullReferenceException の例外エラーを
発生させますが、後者(VB の Trim関数)ではエラーとならず、長さ 0 の文字列 "" を返します。
その意味では、Trim 関数の方が安全であると見ることもできます。
とはいえ今回の場合で言えば、txtTanka.Text が Nothing を返すことは有りえないため、
結果的にはどちらを使っても一緒です。お好きなほうをどうぞ。
それから、VB には「Str 関数」が存在するため、str という変数名は
避けておいた方が無難かと思います。別に予約語というわけではありませんので、
変数名を str としても、動作上の問題は無いのですが、一応念のため。
|