-2

テキストボックス「99:99」にマスクがあり、10進数に変換する必要があります。例: 文字列 "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));

代わりは。

または、ヘンク・ホルターマンが提案したように:

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

同じ効果があります(アメリカ以外のマシンではクラッシュしません)。

于 2012-08-21T09:33:34.060 に答える
1

解析:する前に を次のように置き換えます。.

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

が正しく解釈CultureInfo.InvariantCultureされるように、 を使用することに注意してください。.

于 2012-08-21T09:20:57.317 に答える