0

データテーブル(Excelスプレッドシートから元々作成されたもの)からデータを読み込む次のC#コードがあります

    private byte GetVal(DataRow dataRow, string caption)
    {
        var val = dataRow.GetValue(caption).ToString().Trim();
        if (!String.IsNullOrEmpty(val))
        {
            return (byte)(Decimal.Parse(val) * 100);
        }
        return (byte)0;
    }

「5.5555555555555552E-2」の値がセルの1つ(val変数)から読み込まれているため、これは爆発的です。

このラインでの爆発:

    return (byte)(Decimal.Parse(val) * 100);

エラーあり:入力文字列が正しい形式ではありませんでした。

値を読み取ることができるように、これを回避するための最良の方法は何ですか?

4

2 に答える 2

2

これを試して:

return (byte)(Decimal.Parse(val, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture));

Decimal.Parse Method (String, NumberStyles, IFormatProvider)

NumberStyles.AllowExponentAllowExponentのサブセットですNumberStyles.Float

数値文字列を指数表記にすることができることを示します。AllowExponentフラグを使用すると、解析された文字列に、「E」または「e」文字で始まり、その後にオプションの正または負の符号と整数が続く指数を含めることができます。つまり、nnnExx、nnnE + xx、およびnnnE-xxの形式の文字列を正常に解析します。小数点記号や仮数または仮数の符号は使用できません。文字列内のこれらの要素を解析できるようにするには、AllowDecimalPointフラグとAllowLeadingSignフラグを使用するか、これらの個々のフラグを含む複合スタイルを使用します。

于 2012-06-06T22:26:21.183 に答える
1
return (byte)(Decimal.Parse(val, NumberStyles.AllowExponent) * 100);
于 2012-06-06T23:08:20.577 に答える