C# 如何将字符串(屏蔽)转换为十进制?
我在文本框“99:99”中有掩码,我需要转换为十进制。 示例:字符串“12:34”转换为12.34 我创建方法:C# 如何将字符串(屏蔽)转换为十进制?,c#,type-conversion,maskedtextbox,C#,Type Conversion,Maskedtextbox,我在文本框“99:99”中有掩码,我需要转换为十进制。 示例:字符串“12:34”转换为12.34 我创建方法: private decimal ConvertStringMaskToDecimal(string strMask) { var split = strMask.Split(':'); if(split.Length==2) { decimal returnValue = decimal.Parse(split[0]) + decimal.Pa
private decimal ConvertStringMaskToDecimal(string strMask)
{
var split = strMask.Split(':');
if(split.Length==2)
{
decimal returnValue = decimal.Parse(split[0]) + decimal.Parse(split[1])/100;
return returnValue;
}
else
{
throw new ArgumentException("strMask not valid");
}
}
此代码已运行,但我认为代码不正确,如何解决此问题只需在解析之前将
:
替换为
:
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)
注意使用
CultureInfo.InvariantCulture
以确保
的解释正确。您可以使用十进制。在将冒号替换为小数点后解析:
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)
正如我在对Oded答案的评论中所说:不建议将点硬编码为十进制分隔符
解释了原因
我建议:
using System.Globalization;
// (...)
decimal.Parse(strMask.Replace(":", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));
相反
或者,正如亨克·霍特曼所说:
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture);
同样的效果(在非美国机器上不会崩溃)。将点硬编码为十进制分隔符不是一个好做法@康拉德·莫拉夫斯基,这是怎么做到的?最好使用:decimal.Parse(…,CultureInfo.InvariantCulture)
@HenkHolterman你说得对。我相应地更新了我的答案。