web-dev-qa-db-ja.com

Decimal.Parseおよび不正な文字列フォーマットエラー

10進数の解析に簡単な問題があります。次のコードは私のコンピューターで正常に動作しますが、サーバー(VPS、Windows Server 2008 R2スタンダードエディション)でプロジェクトを公開すると、「入力文字列の形式が正しくありません」というエラーが表示されます。どんなアイデアが間違っていますか?

解析した数値をMySQL DBテーブルに保存します-列のタイプはDECIMAL(10, 4)です

ソースコード:

CultureInfo nonInvariantCulture = new CultureInfo("en-AU"); //or pl-PL
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
string toConvert = ("3,4589").Replace(",", "."); //it's an example
decimal parsed = decimal.Parse(toConvert);
13
Tony

数値の文字列表現で小数点記号としてカンマを使用していることがわかっている場合は、カスタムNumberFormatInfoを使用して値を解析できます。

var number = "3,4589";
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," };
var value = Decimal.Parse(number, numberFormatInfo);

既存のCultureInfopl-PLのように機能することがわかっているカルチャに使用することもできますが、これは理解しやすいと思います。

一方、数値の形式が3.4589の場合、CultureInfo.InvariantCultureを使用するだけで、en-USに基づく「デフォルト」のカルチャの一種と見なすことができます。

var number = "3.4589";
var value = Decimal.Parse(number, CultureInfo.InvariantCulture);
25

カスタムNumberFormatInfoを作成して値を解析できます

これらの行に何か

NumberFormatInfo numinf = new NumberFormatInfo();
numinf.NumberDecimalSeparator= ",";    
decimal.Parse("3,4589", numinf);
4
V4Vendetta

以下のコードを回避することで問題を解決できると思います。

decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture);
4
Smaug