【问题标题】:System.FormatException: Input string was not in a correct formatSystem.FormatException:输入字符串的格式不正确
【发布时间】:2011-11-23 20:54:53
【问题描述】:
    private void ReadUnitPrice()
    {
        Console.Write("Enter the unit gross price: ");
        unitPrice = double.Parse(Console.ReadLine());
    }

这应该可以,但我遗漏了一些明显的东西。每当我输入双精度时,都会出现错误:System.FormatException:输入字符串格式不正确。 请注意,“unitPrice”被声明为双精度。

【问题讨论】:

  • 你输入了什么值?
  • 0-10 范围内的值,例如 4.5 或 5.5

标签: c# visual-studio-2010 formatexception


【解决方案1】:

可能是您使用了错误的逗号分隔符号,甚至在指定双精度值时出现了其他错误。 无论如何,在这种情况下,您必须使用Double.TryParse() 方法,该方法在异常方面是安全的,并且允许指定格式提供程序,基本上是要使用的文化。

public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out double result
)

TryParse 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法,但此方法不抛出 如果转换失败则异常。如果转换成功,则 返回值为真,结果参数设置为的结果 转换。如果转换失败,则返回值为 false 并且 结果参数设置为零。

编辑:回复评论

if(!double.TryParse(Console.ReadLine(), out unitPrice))
{
    // parse error
}else
{
   // all is ok, unitPrice contains valid double value
}

你也可以试试:

double.TryParse(Console.ReadLine(), 
                NumberStyle.Float, 
                CultureInfo.CurrentCulture, 
                out unitPrice))

【讨论】:

  • 是的,我实际上只是尝试过......你猜怎么着,它有效。我现在讨厌瑞典逗号分隔符号..
  • TryParse 在其参数中包含更多参数,并且由于我是 C# 中的新手并且不太熟悉 TryParse 然后将结果发送到何处(因为它返回一个布尔值)我会坚持使用 Parse现在。 “接收 2 个返回值”似乎有点让我头疼,但我会记住 TryParse 以备将来使用。谢谢。
  • @Ryuji89 :查看更新的答案,编辑部分
猜你喜欢
  • 2023-03-14
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多