-2

我在文本框“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");
    }
}

此代码有效,但我认为代码不正确,如何解决此问题

4

3 回答 3

3

正如我在对 Oded 回答的评论中所说:不建议将点硬编码为小数分隔符。

这张照片解释了原因。

我建议:

using System.Globalization;

// (...)
decimal.Parse(strMask.Replace(":", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));

反而。

或者,正如 Henk Holterman 所建议的:

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture);

达到同样的效果(不会在非美国机器上崩溃)。

于 2012-08-21T09:33:34.060 回答
1

只需在解析前替换:with :.

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)

请注意使用CultureInfo.InvariantCulture以确保.正确解释 。

于 2012-08-21T09:20:57.317 回答
-1

您可以在用小数点decimal.Parse替换冒号后使用:.

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)
于 2012-08-21T09:22:00.010 回答