WP8 - C# - 将字符串解析为十进制 FormatException
Posted
技术标签:
【中文标题】WP8 - C# - 将字符串解析为十进制 FormatException【英文标题】:WP8 - C# - Parsing string to decimal FormatException 【发布时间】:2014-03-01 14:34:59 【问题描述】:我目前正在尝试将字符串“277.968”解析为十进制,但出现 FormatException 异常。
我已经读到我需要以这种方式执行十进制解析:
string str = "277.968";
decimal.Parse(str, CultureInfo.InvariantCulture);
不过,我得到了上述异常。
我能做什么?
编辑:将浮点数固定为十进制
【问题讨论】:
这是您的 exact 代码,还是您实际上是从其他地方解析字符串?例如,我想知道值中是否存在一些不可见的字符。 我目前的确切代码如下: Debug.WriteLine(new string(risul)); Debug.WriteLine(decimal.Parse(new string(risul), CultureInfo.InvariantCulture));当第一行正确打印“277.968”时,第二行抛出异常 你为什么使用new string(risul)
? risul
的类型是什么?你能打印字符串的 length 吗?数据从何而来?请注意,您在问题中指定了float.Parse
,但在评论中指定了decimal.Parse
- 它是什么?如果您尝试decimal.Parse("277.968", CultureInfo.InvariantCulture)
,会发生什么?
risul 实际上是一个字符数组。打印字符串的长度,它报告它有 80 个字符长。修复了小数/浮点部分,只是打字错误
我这样检查字符串长度:Debug.WriteLine("Length: " + new string(risul).Length);
【参考方案1】:
打印字符串的长度,它报告它有 80 个字符长。
好吧,那就是问题所在。您的字符串不是 "277.968"
- 它是 "277.968\0\0\0\0\0\0(...)"
- 并且无法解析。
我的猜测是您从某种TextReader
中读到了此内容,但忽略了Read
的返回值,即已读取的字符数。
例如,如果您当前的代码有效:
char[] risul = new char[80];
reader.Read(risul, 0, risul.Length);
decimal value = decimal.Parse(new string(risul), CultureInfo.InvariantCulture);
那么你应该有:
char[] risul = new char[80];
int charsRead = reader.Read(risul, 0, risul.Length);
decimal value = decimal.Parse(new string(risul, 0, charsRead),
CultureInfo.InvariantCulture);
...虽然这仍然假设您在一次调用Read
中读取所有适当的数据,但情况不一定如此。您可能只想:
string data = reader.ReadToEnd();
decimal value = decimal.Parse(data, CultureInfo.InvariantCulture);
【讨论】:
看起来不错,但我仍然无法正常工作。我什至尝试将 charsRead 值强制为 4,所以我可以确定,在这种情况下,读取的字符实际上比我需要的字符还要少,但我仍然得到 FormatException。 Debug.WriteLine(decimal.Parse(new string(risul, 0, 4), CultureInfo.InvariantCulture));扔它 @guido1993:你有没有试过我之前建议的代码,只是硬编码decimal.Parse("277.698")
?是否可能实际上是包含不可打印字符的字符串的 start ?您应该将“获取正确的字符串值”和“解析字符串值”的问题分开。目前我们正在同时诊断两者,这并不高效。
我刚刚尝试打印这个:Debug.WriteLine(decimal.Parse("277.698"));我得到(大约,不想数它们)20 行 277698。我感到越来越困惑。我认为字符串的标题不可能包含这些不可打印的字符
我尝试了 decimal.Parse("277.698",CultureInfo.InvariantCulture),它仍然会打印 20 次,277.698。仍然对为什么要打印 20 次感到困惑
@guido1993:好的,听起来你已经循环了。但是,您没有向我们展示任何代码。这听起来肯定是问题在于您如何获取数据,而不是解析本身。以上是关于WP8 - C# - 将字符串解析为十进制 FormatException的主要内容,如果未能解决你的问题,请参考以下文章
C# 将字符串转换为双精度/十进制并返回字符串,保留尾随零,为千位添加逗号