カンマの入った数字から値をとる方法

タグの編集
投稿者 hori  (社会人) 投稿日時 2013/4/25 21:13:03
金額を表記するにはカンマをつけた方が雰囲気がいいのですが
カンマの付いた数列から値を取り戻すのには骨が折れました。

いい方法を見つけたんだろうと思いますので
僕同様の、本学同窓の初学者のためにご報告申し上げます。
------------------

        Dim a As String = "123,456,789"

        Dim b As Integer = Val(a)

        MsgBox(Str(b))

------------------

とやると "123" と表示されますが

------------------

        Dim a As String = "123,456,789"

        Dim b As Integer = Val(a.Replace(",", ""))

        MsgBox(Str(b))

------------------

とすれば "123456789" になります。

まぁ、それだけのことですが
発見するのに結構苦労しました。
参考にしてもらえれば幸甚大であります。
投稿者 YuO  (社会人) 投稿日時 2013/4/25 22:22:05
うーん,普通は
Int32.Parse(a, NumberStyles.Integer Or NumberStyles.AllowThousands)
や同TryParseなどを使いますかね……。
http://msdn.microsoft.com/ja-jp/library/c09yxbyt.aspx
http://msdn.microsoft.com/ja-jp/library/system.globalization.numberstyles.aspx

ロケールによって,桁区切り文字はカンマだったりピリオドだったりするので,
このあたりのカルチャ依存するメソッドを使った方がよいです。
投稿者 (削除されました)  () 投稿日時 2013/4/26 08:11:22
(削除されました)
投稿者 shu  (社会人) 投稿日時 2013/4/26 08:26:51
CInt("123,456,789")

123456789

になりますよ。

例外を考えるならYuOさんが提示されているようにTryParseを
使った方がよいかと思います。

Val関数は適当に数値を拾ってくれますが今回のように意図しない動きをする
場合があります。意図した動きをさせるために小細工が必要になったりします。
投稿者 太郎冠者  (社会人) 投稿日時 2013/4/26 13:56:09
本題と関係ない話ですが

MsgBox(Str(b))

数値を文字列に変換する場合にStr関数を使用すると
正数の場合に先頭にスペースが入ってしまいますので
特別な意図が無い場合は、CStrやFormat、またはToStringなんかを
使用されたほうがいいですよ。

MSDN - Str 関数
http://msdn.microsoft.com/ja-jp/library/4y6a1sx7(v=vs.80).aspx