试图将负数货币金额从字符串解析为十进制

时间:2013-06-09 23:59:37

标签: c# .net

我正在尝试将以下字符串“-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)

更好的方法吗?

3 个答案:

答案 0 :(得分:3)

有些东西显然不对,我怀疑line[1]不是你认为的那样。您确定 line[1] == "-5017.85"true吗?

另一种可能的情况是,您有不同的文化设置阻止-被解析为可选符号字符或.作为小数点分隔符,但这是不太可能的情况。< / p>

如果您确定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("\"", ""));

答案 1 :(得分:1)

看起来你的字符串包含一个不必要的“字符。你可以使用string.replace删除它:

sAmount = decimal.Parse(line[1].Replace("\"", ""));

答案 2 :(得分:0)

尝试double.Parse(line[1].Trim());;似乎那里有非数字的空白字符。