10

5.5kgまたはのような文字列があり、またはを10進値として7.90gram取得したいと思います。どうすればC#でそのような結果を得ることができ、文字列が常に10進数で始まるというもう1つのことができます。5.57.90

これは、小数以外の何かが発生するたびにエラーをスローする私のコードです。

string weight = attributeValue;
if (!string.IsNullOrEmpty(weight))
{
    product.Weight = Convert.ToDecimal(attributeValue);
}
else
{
    product.Weight = 0.00m;
}
4

3 に答える 3

27

先頭の数字の部分に一致する正規表現を作成します。これは、常に小数点があるかどうか、千の区切り記号にコンマを使用できるかどうか、常に小数点として使用するかどうかなどに部分的に依存します.。ただし、次のようになります。

^-?\d+(?:\.\d+)?

次に、その正規表現をテキストと照合し、照合の値を取得して(成功した場合)、その値でdecimal.Parseまたはdouble.Parseを使用します。

Regex regex = new Regex(@"^-?\d+(?:\.\d+)?");
Match match = regex.Match(text);
if (match.Success)
{
    weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture);
}

質量などの「自然な」値の場合は、よりも適切な場合があることdoubleに注意してくださいdecimal。後者は、通貨などの「人工的な」値に適しています。これらの値は、当然、10進数で最もよく表現され、正確な値を持ちます。それはあなたがしていることに依存します。

于 2012-06-16T07:18:55.363 に答える
2

これは完全に異なるアプローチです

    string oldstr = "1.7meter";
        Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray();
        decimal number = Convert.ToDecimal( new string(strarr)); 
于 2012-06-16T07:53:39.120 に答える
0

入力形式については、このコードで小数を取得できます

var weight =Decimal.Parse( Regex.Match(input_string, "[0-9]*\\.*[0-9]*").Value);

入力文字列が異なる形式の場合は、正規表現パターンを変更する必要があります。

于 2012-06-16T07:44:16.177 に答える