系统格式异常:输入字符串不符合正确格式。

6
    private void ReadUnitPrice()
    {
        Console.Write("Enter the unit gross price: ");
        unitPrice = double.Parse(Console.ReadLine());
    }

这应该是可行的,但我错过了一些显而易见的东西。每当我输入一个双精度浮点数时,它会给我一个错误:System.FormatException: 输入字符串格式不正确。请注意,'unitPrice'被声明为double类型。


你输入了什么值? - Michael Goldshteyn
0-10之间的值,如4.5或5.5。 - Petrus K.
1个回答

7

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

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

TryParse方法类似于Parse(String, NumberStyles,IFormatProvider) 方法,但是如果转换失败,此方法不会抛出异常。如果转换成功,则返回值为true,并且结果参数设置为转换的结果。如果转换失败,则返回值为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))

是的,我刚刚实际尝试了一下.. 猜猜怎么着,它奏效了。我现在讨厌瑞典的逗号分隔符.. - Petrus K.
TryParse在其参数中接受更多的参数,由于我是C#的新手,并不太熟悉TryParse将结果发送到哪里(因为它返回一个布尔值),所以我现在会使用Parse。 "接收2个返回值"似乎有点超出我的能力范围,但我会记住TryParse以备将来使用。谢谢。 - Petrus K.
@Ryuji89:请查看更新的答案,编辑部分。 - sll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接