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

これは機能するはずですが、明らかな何かが欠けています。doubleを入力すると、次のエラーが発生します。System.FormatException:入力文字列が正しい形式ではありませんでした。'unitPrice'はdoubleとして宣言されていることに注意してください。

4

1 に答える 1

7

間違ったコンマ区切り記号を使用しているか、double値を指定しているときに他のエラーが発生した可能性があります。とにかく、そのような場合は、例外の観点から安全で、フォーマットプロバイダー、基本的にはカルチャーを使用できる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))
于 2011-09-23T17:38:30.447 に答える