読者です 読者をやめる 読者になる 読者になる

雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

各数値型の TryParse メソッドの動作差異

.NET C#

Int32.TryParse や Int64.TryParse にカンマ編集処理された数値文字列を渡すと false が返ってきます。

Int32.TryParse("1,234", out value); // false
Int64.TryParse("1,234", out value); // false

一方、 Double.TryParse や Decimal.TryParse にカンマ編集処理された数値文字列を渡すと true が返ってきて変換が成功します。

Double.TryParse("1,234.123", out value); // true
Decimal.TryParse("1,234.123", out value); // true

これ、デフォルトで設定されている NumberStyles が違う( Int32 と Int64 は AllowThousands が指定されていない)のが原因なんですが、なぜ Double と Decimal だけ AllowThousands が指定されているんだろう。。。
ちなみに、 Int32 / Int64 でカンマ編集処理された数値文字列をパースするには、明示的に NumberStyles を指定してあげれば出来ます。

Int32.TryParse("1,234", NumberStyles.Integer | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out value);
Int64.TryParse("1,234", NumberStyles.Integer | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out value);