0

我正在尝试将以下字符串“-5017.85”移动到十进制变量中

我试过了

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 回答