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);
数値の文字列表現で小数点記号としてカンマを使用していることがわかっている場合は、カスタムNumberFormatInfo
を使用して値を解析できます。
var number = "3,4589";
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," };
var value = Decimal.Parse(number, numberFormatInfo);
既存のCultureInfo
をpl-PL
のように機能することがわかっているカルチャに使用することもできますが、これは理解しやすいと思います。
一方、数値の形式が3.4589
の場合、CultureInfo.InvariantCulture
を使用するだけで、en-US
に基づく「デフォルト」のカルチャの一種と見なすことができます。
var number = "3.4589";
var value = Decimal.Parse(number, CultureInfo.InvariantCulture);
カスタムNumberFormatInfo
を作成して値を解析できます
これらの行に何か
NumberFormatInfo numinf = new NumberFormatInfo();
numinf.NumberDecimalSeparator= ",";
decimal.Parse("3,4589", numinf);
以下のコードを回避することで問題を解決できると思います。
decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture);