字符串到十进制转换:点分隔而不是逗号
我从文本框中读取了一个字符串。 它包含一个用于小数分隔的逗号。
我将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中查看小数或双精度值。 这不符合您对代码的文化设置。
如果要查看以逗号作为小数分隔符的decimal
和double
值,请更改“控制面板”上的“区域和语言”设置。
我最终使用了这个解决方案。
decimal weeklyWage; decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);