0

次の文字列「-5017.85」を10進変数に移動しようとしています

私はもう試した

var sAmount = float.Parse(line[1]);
sAmount = decimal.Parse(line[1]);
sAmount = double.Parse(line[1]);
sAmount = decimal.Parse(line[1], NumberStyles.Currency);
sAmount = decimal.Parse(line[1], NumberStyles.AllowLeadingSign);

しかし、どれも機能しません。system.formatexception が発生します

私は何が欠けていますか?

編集:もちろんデバッグしましたが、値は実際には次のとおりです。エスケープ文字"\"-5017.85\""であると想定しました\ が、ウォッチウィンドウの変数からそれらを削除すると、解析は正常に機能します。「エスケープ文字」を削除した後"-5017.85"

編集2:これは機能し、正しい答えが得られますが、まったく好きではありません

line[1].Remove(line[1].Length-1,1).Remove(0,1)

これを行うより良い方法はありますか?

4

3 に答える 3

3

ここで何かが明らかに間違ってline[1]います。あなたが思っているようなものではないと思います。それはよろしいですline[1] == "-5017.85"true

別のカルチャ設定があり-、オプションの記号文字または.小数点区切り記号として解析されないという別のシナリオが考えられますが、これはまれなシナリオです。

それが であると確信している場合line[1] == "-5017.85"true、試していただけますか

var sAmount = Decimal.Parse(
    line[1],
    System.Globalization.CultureInfo.InvariantCulture
);

そして報告します。

もちろんデバッグしましたが、実際の値は次のとおりです。"\"-5017.85\""

その場合、次のように文字を空の文字列String.Replaceに置き換えるだけです。\"

var sAmount = Decimal.Parse(line[1].Replace("\"", ""));
于 2013-06-10T00:06:38.017 に答える
1

文字列に不要な " 文字が含まれているようです。 string.replaceを使用して、そのように削除できます。

sAmount = decimal.Parse(line[1].Replace("\"", ""));
于 2013-06-10T02:33:17.523 に答える
0

試してみてくださいdouble.Parse(line[1].Trim());。数値以外の空白文字が含まれているようです。

于 2013-06-10T00:23:52.747 に答える