2011-09-23 8 views
5
private void ReadUnitPrice() 
    { 
     Console.Write("Enter the unit gross price: "); 
     unitPrice = double.Parse(Console.ReadLine()); 
    } 

To powinno zadziałać, ale brakuje mi czegoś oczywistego. Za każdym razem, gdy wprowadzam podwójne, pojawia się błąd: System.FormatException: Ciąg wejściowy nie był w poprawnym formacie. Pamiętaj, że "unitPrice" jest zadeklarowane jako podwójne.System.FormatException: Ciąg wejściowy nie był w poprawnym formacie.

+0

Jakie wartości są Państwo wprowadzania? –

+0

wartości w zakresie 0-10 jak 4,5 lub 5,5 –

Odpowiedz

6

Może to oznaczać, że używasz niewłaściwego symbolu separacji przecinkami lub nawet popełniłeś inny błąd, określając podwójną wartość. W każdym razie w takich przypadkach należy użyć metody Double.TryParse(), która jest bezpieczna pod względem wyjątku i umożliwia określenie dostawcy formatu, w zasadzie w celu wykorzystania kultury.

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

The TryParse method is like the Parse(String, NumberStyles, IFormatProvider) method, except this method does not throw an exception if the conversion fails. If the conversion succeeds, the return value is true and the result parameter is set to the outcome of the conversion. If the conversion fails, the return value is false and the result parameter is set to zero.

EDIT: Odpowiedź na komentarz

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

Ponadto można spróbować:

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

tak, właśnie próbowałem, że faktycznie .. i zgadnij co, to działa. Nienawidzę teraz symbolu separacji ze szwedzkimi przecinkami .. –

+0

TryParse przyjmuje więcej parametrów w swojej argumentacji i ponieważ jestem nowicjuszem w C# i nie do końca wiadomo, gdzie tryParse następnie wysyła wynik (ponieważ zwraca bool) będę trzymać z Parse na razie. "Odbieranie 2 wartości zwracanych" wydaje się nieco przekraczane przez mój bankomat, ale będę pamiętał o TryParse na przyszłość. Dzięki. –

+0

@ Ryuji89: zobacz zaktualizowaną odpowiedź, EDYCJA części – sll

Powiązane problemy