如何将字符串转换成十进制?
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-DE
、de-AT
、fr-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);
我的文本框有一个值:
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-DE
、de-AT
、fr-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);