QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

文字型を数値型へ変換する方法

テーブルで文字型(String)で定義されている項目を
VB.NETのプログラム内では数値型(Integer)として
計算などに使いたいのですけれど、どのように変換したら
良いのでしょうか?
教えてください。

質問者:初心者です

回答

Convert.ToInt32()メソッドを使ってください。

投稿者:深山

編集 履歴 (0)

個人的には、System.Convert 系より、[値型].Parse メソッド系をお勧めします。
たとえば、Integer であれば、Integer.Parse メソッドなどをお試しください。

2.0 であれば、Integer.TryParse メソッドを使いましょう。
型と検証がひとつになっているので、非常にわかりやすいです。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

そうだよね。System.Convert系はダメだね。遅いし。

投稿者:ぶさいくろう

編集 履歴 (0)

Integer.Parseメソッドの存在を忘れてましたorz

System.Convert系が遅いのは知りませんでした。
#今まで意識しないで使ってました...

投稿者:深山

編集 履歴 (0)

深山さんの書き込み (2006-07-04 19:57) より:

Integer.Parseメソッドの存在を忘れてましたorz

System.Convert系が遅いのは知りませんでした。

System.Convert クラスにあるメソッドは、そんなに遅くないハズです。(確か)
むしろ、VB 君お得意の CInt は、

 Microsoft.VisualBasic.CompilerServices.Conversions::ToInteger()

なのですが、こっちの方こそすごいです。
ベンチテストしてみると、System.Int32::Parse() に比べて明らかに遅いです。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

すまん。そこまで大差なかったね。
CIntとかと間違えていたかもしれぬ。

投稿者:ぶさいくろう

編集 履歴 (0)

試しに3種類の変換方法でString型をInt32型に10万回変換してみました。

[環境]
OS : WinXP
メモリ : 1ギガ
CPU : Pen4 1.6GHz

== 結果 ==
Integer.Parse : 0.0322552167943132秒
Convert.ToInt32 : 0.0336567915754656秒
CInt : 0.359069937659675秒

CIntが10倍以上遅いよ。さすがVB伝統のCIntだ
じゃんぬねっとさんとぶさいくろうさんのお勧め通りInteger.Parseメソッドですね。
#Integer.TryParse メソッドは環境がないので試していません。

投稿者:深山

編集 履歴 (0)

まぁ Convert.ToInt32() は Int32.Parse() に委譲してるだけですからね。速度に関しては推して知るべしでしょう。
Convert.ToInt32() は引数の null チェックをして null の場合は 0 を返してくれるオマケつき。(それが良いのか悪いのかは別ですが)

_________________囚人のジレンマな日々

投稿者:囚人

編集 履歴 (0)

ご指導ありがとうございました。
確認が遅れて申し訳ありません。

勉強不足で申し訳ないのですけれど、
Convert.ToInt32() もしくはInteger.Parseの記述方法
を教えてください。

Dim A As Integer
Dim B As String

B=Convert.ToInt32(A)

のように記述し実行するとエラーとなってしまいます。

投稿者:初心者です

編集 履歴 (0)

Dim A As Integer

Dim B As String

B=Convert.ToInt32(A)

志村ー、逆、逆!

数値型を数値型に変換して文字列に入れようとしてるよ。

投稿者:Bell

編集 履歴 (0)

Bellさんの発言の通りです。
戻り値にInteger型が欲しいのですから、当然こうなります。



Dim A As Integer 
Dim B As String 

A = Integer.Parse(B)
A = Convert.ToInt32(B)

投稿者:深山

編集 履歴 (0)

私の設定等も間違っていたようでした。
色々ありがとうございました。

投稿者:初心者です

編集 履歴 (0)

俺たちはすごい思い違いをしていたんだ。
実装がミスってるだけだと思っていたが、このエラーは設定ミスだったんだよ!!

な・・・・なんだってー!!

いやいや。実装が間違ってただけだろうが。

投稿者:ぶさいくろう

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。