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

How to convert string into decimal?

我的文本框有一个值:

1212,12

另外我的文本框有一个掩码:

MaskType=Numeric
EditMask='n2'

我试着解析它:

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

但在预期值=1212.12 时得到值=121212

有什么问题吗?

您的文化不匹配:

1212,12

en-US

使用 . 作为小数分隔符(即 1212.12)或使用 , 的文化(例如 de-DEde-ATfr-FR),但是 en-US 使用 . 作为小数分隔符,使用 , 作为千位分隔符。

en-US. 代替 ,

分隔小数点后的位置

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

en-US 文化有 NumberDecimalSeparator as a . not , but it has NumberGroupSeparator 作为 ,

这就是为什么它认为您的 ,NumberGroupSeparator 并且它被解析为 121212.

的原因

作为解决方案,您可以使用不同的 IFormatProvider which has , as a NumberDecimalSeparator or you can clone your en-US culture with CultureInfo.Clone method 并将其 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

更改分隔符或更改区域性:

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

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

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