字符串到十进制转换:点分隔而不是逗号

我从文本框中读取了一个字符串。 它包含一个用于小数分隔的逗号。

我将NumberFormatInfo.CurrencyDecimalSeparator设置为, (逗号)但是当我将字符串转换为十进制时Convert.ToDecimal(mystring); 我得到一个小数点的单独值。

例:

 decimal a=Convert.ToDecimal("1,2345"); ----> decimal is 1.2345 

我也试过了:

 double a=Convert.ToDouble("1,2345"); 

但再次点到十进制

这一切都与文化有关。 如果你有任何其他文化而不是“美国英语”(以及良好的发展方式),你应该使用这样的东西:

 var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US")); // (or 1,2345 with your local culture, for instance) 

(显然,你应该用你当地文化的文化取代“en-US”)

同样的方法,如果你想做ToString()

 d.ToString(new CultureInfo("en-US")); 

而不是取代我们可以强迫文化

 var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 

它将输出18.285

谢谢你的回复。

因为我必须在xml文件中写一个十进制数字,我已经找到了问题所在。 在本次讨论中,我了解到xml文件标准使用点作为十进制值,这与文化无关。 所以我的解决方案是在xml文件中写入点十进制数,并从同一个xml文件mystring.Replace(".", ",");转换重入的字符串mystring.Replace(".", ","); 感谢Agat建议在xml上下文和ΕГИИИ中研究问题,因为我不知道visual studio不尊重我在代码中的文化设置。

您正在Visual Studio中查看小数或双精度值。 这不符合您对代码的文化设置。

如果要查看以逗号作为小数分隔符的decimaldouble值,请更改“控制面板”上的“区域和语言”设置。

我最终使用了这个解决方案。

 decimal weeklyWage; decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);