我在文本框中有掩码“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.Parse(split[1])/100;
return returnValue;
}
else
{
throw new ArgumentException("strMask not valid");
}
}
这段代码工作但我认为代码不正确,如何解决这个问题
答案 0 :(得分:3)
正如我在评论Oded的回答中所说的那样:不建议将点硬编码为小数点分隔符。
This picture解释了原因。
我建议:
using System.Globalization;
// (...)
decimal.Parse(strMask.Replace(":", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));
代替。
或者,正如Henk Holterman所说:
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture);
达到同样的效果(不会在非美国机器上崩溃)。
答案 1 :(得分:1)
在解析之前,只需将:
替换为.
:
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)
请注意使用CultureInfo.InvariantCulture
确保正确解释.
。
答案 2 :(得分:-1)
使用小数点decimal.Parse
替换冒号:
后可以使用.
decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)