我的文本框我有一个值:
1212,12
此外,我的文本框还有一个掩码:
MaskType=Numeric
EditMask='n2'
我试着解析它:
var culture = CultureInfo.CreateSpecificCulture("en-US");
var value = decimal.Parse(myTextBox.Text, culture);
但是当期望值= 1212.12时,获得值= 121212
有什么不对?
答案 0 :(得分:4)
en-US
使用.
代替,
尝试另一种文化或将myTextBox.Text设置为1212.12
答案 1 :(得分:3)
你有一种不匹配的文化:
1212,12
和
的en-US
使用.
作为小数点分隔符(即1212.12
)或使用,
的文化(例如de-DE
,de-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);