我正在尝试将以下字符串“-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)
更好的方法吗?
答案 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());
;似乎那里有非数字的空白字符。