水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 文字列を数値に変換する際もカルチャに注意

文字列を数値に変換する際もカルチャに注意

2009年11月27日(金曜日)

文字列を数値に変換する際もカルチャに注意

公開: 2009年11月28日0時35分頃

こんなお話が: 「伊郵政金融、小数点処理のバグにより大混乱 (slashdot.jp)」。

イタリアでは位取りではなく小数点にカンマが使われるので、こういうコードを実行してみると……。

string s = "1,234";

Decimal invDecimal = Convert.ToDecimal(s, CultureInfo.InvariantCulture);
Console.WriteLine(invDecimal);

CultureInfo jp = CultureInfo.CreateSpecificCulture("ja-JP");
Decimal jpDecimal = Convert.ToDecimal(s, jp);
Console.WriteLine("{0}: {1}", jp, jpDecimal);

CultureInfo it = CultureInfo.CreateSpecificCulture("it-IT");
Decimal itDecimal = Convert.ToDecimal(s, it);
Console.WriteLine("{0}: {1}", it, itDecimal);

結果はこうなると。

1234
ja-JP: 1234
it-IT: 1.234

文字列比較の時、カルチャに気をつけないと予想外の文字が同一視されて大変なことになるという話はよくありますが、文字列を数値に変換する際も要注意ということですね。

関連する話題: プログラミング / C#

最近の日記

関わった本など