【问题标题】:Double.Parse("string") FormatException with correct input输入正确的 Double.Parse("string") FormatException
【发布时间】:2014-04-22 16:48:57
【问题描述】:

我正在尝试解析

Double.Parse(rowData[j++]).

输入字符串是正确的(“7,412”),j=123,所以它一直有效。所有数字都用“,”书写。

如果我在手表中输入Double.Parse(rowData[j]) 就更有效了。

这里有什么问题?

【问题讨论】:

  • 如果你在手表中输入Double.Parse(rowData[j+1])会发生什么?
  • 可能是小数逗号的原因,需要根据本地化点。
  • 如果你输入Double.Parse(rowData[j]) 之后 j++,你会得到一个不同的值。
  • @hvd 你是对的,似乎并非所有字段都有数据,j++ 只显示下一个条目
  • 执行Double.Parse(rowData[j++]) 与执行Double.Parse(rowData[j]); j=j+1; 相同

标签: c# parsing


【解决方案1】:

你有逗号而不是你的小数分隔符。

http://msdn.microsoft.com/en-us/library/3s27fasw

如果是千位分隔符,您应该使用 AllowThousands NumberType

NumberStyles styles = NumberStyles.AllowThousands | NumberStyles.Float;
Double.Parse(value, styles);

或者您应该在解析之前使用string.Replace 将逗号替换为.,如果这被认为是小数分隔符

【讨论】:

  • 如果这是问题所在,Double.Parse(rowData[j]) 将无法在 Watch 窗口中使用,但 OP 已经声明确实有效。
【解决方案2】:

根据MSDN你可以试试:

value = "4,320.64";
styles = NumberStyles.AllowThousands |
            NumberStyles.Float; 
number = Double.Parse(value, styles);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2014-01-27
    相关资源
    最近更新 更多