如何将字符串转换为十进制?

时间:2015-02-20 12:16:41

标签: c# string decimal

我的文本框我有一个值:

1212,12

此外,我的文本框还有一个掩码:

MaskType=Numeric
EditMask='n2'

我试着解析它:

var culture = CultureInfo.CreateSpecificCulture("en-US");
var value = decimal.Parse(myTextBox.Text, culture);

但是当期望值= 1212.12时,获得值= 121212

有什么不对?

4 个答案:

答案 0 :(得分:4)

en-US使用.代替,

分隔小数点后的位置

尝试另一种文化或将myTextBox.Text设置为1212.12

答案 1 :(得分:3)

你有一种不匹配的文化:

  

1212,12

  

的en-US

使用.作为小数点分隔符(即1212.12)或使用,的文化(例如de-DEde-AT,{{1} }),但fr-FR使用en-US作为小数点分隔符,使用.作为千位分隔符。

答案 2 :(得分:1)

en-US种群文化NumberDecimalSeparator.而不是,,但NumberGroupSeparator,

这就是为什么它认为您的,NumberGroupSeparator,这就是为什么它会解析为121212

作为解决方案,您可以使用,作为NumberDecimalSeparator的{​​{1}},或者您可以使用IFormatProvider克隆en-US文化并设置它NumberDecimalSeparator属性为,,并将NumberGroupSeparator属性更改为其他内容。

string s = "1212,12";
var culture = (CultureInfo)CultureInfo.CreateSpecificCulture("en-US").Clone();
culture.NumberFormat.NumberDecimalSeparator = ",";
culture.NumberFormat.NumberGroupSeparator = ".";
decimal value = decimal.Parse(s, culture); // 1212.12

答案 3 :(得分:1)

更改分隔符或更改文化:

对于en-US文化分隔符为.

如果您想使用分隔符,,请使用fr-FR culture!

var culture = CultureInfo.CreateSpecificCulture("fr-FR");
var value = decimal.Parse(myTextBox.Text, culture);