2017-05-11 8 views
0

Ich versuche, eine Dezimalzahl in einer meiner Methoden zu analysieren, aber es gibt mir einen Laufzeitfehler und ich verstehe nicht warum. Ich muss die Endgeschwindigkeit eines Objekts berechnen, aber jedes Mal, wenn ich versuche, eine Dezimalzahl als Wert einzugeben, bekomme ich einen Laufzeitfehler und konzentriere mich auf die Stelle, an der ich die Dezimalzahl analysiert habe.Parsen einer Dezimalzahl in C#

private static decimal GetVelocity() 
    { 
     Console.Write("Please enter the intial velocity of the object: "); 
     decimal mVelocity = decimal.Parse(Console.ReadLine()); 
     return mVelocity; 
    } 

Kann mir bitte jemand sagen, was ich falsch mache?

+1

Was ist der Fehler? –

+1

Was ist der Fehler und was ist diese Nummer, die Sie eingeben? –

+1

und was tippst du in die Konsole ein? –

Antwort

2

decimal.Parse benötigt eine gültige Dezimalzahl, andernfalls wird ein Fehler ausgegeben. 1.5, 1 und 100.252 sind alle gültigen Dezimalstellen in den meisten Fällen mit der Standardkultur. Die von Ihnen verwendete Kultur versucht möglicherweise, eine Dezimalzahl mit einem falschen Trennzeichen zu konvertieren (z. B. ,). Siehe this MSDN article zur Verwendung der überladenen decimal.TryParse, um kulturspezifische Informationen bereitzustellen.

Idealerweise sollten Sie decimal.TryParse verwenden, um zu versuchen, es zu konvertieren, und ein Fehler angezeigt sonst:

private static decimal GetVelocity() 
{ 
    Console.WriteLine("Please enter the intial velocity of the object: "); 
    decimal mVelocity; 
    while (!decimal.TryParse(Console.ReadLine(), out mVelocity)) 
    { 
     Console.WriteLine("Invalid velocity. Please try again: "); 
    } 
    return mVelocity; 
} 
+3

tatsächlich ist Ihre Antwort nicht ganz richtig, es hängt von den regionalen Einstellungen ab, Koma oder Punkt –

+0

@ ВиталийТерзиев Meine Antwort aktualisiert – FrankerZ

0

Wenn die Eingabe in einem ungültigen Format ist Parse wird eine Ausnahme werfen. Sie haben 2 Optionen.

Wickeln Sie den Anruf in einem try/catch-Block

decimal mVelocity; 

try { 
    mVelocity = decimal.Parse(Console.ReadLine()); 
} 
catch(Exception e){} 

Oder TryParse stattdessen zu analysieren.

decimal mVelocity; 
bool success = Decimal.TryParse(value, out mVelocity) 

Sie sind Code wirft eine Ausnahme, da die Eingabe nicht in eine Dezimalzahl analysiert werden kann. See msdn for examples

-1

Hallo, Sie können stattdessen Regex verwenden.

private static decimal GetVelocity() 
    { 
     Regex regex = new Regex(@"^[0-9]([.,][0-9]{1,3})?$"); 
     Console.Write("Please enter the intial velocity of the object: "); 
     string decimalInput = Console.ReadLine(); 

     while (!regex.IsMatch(decimalInput)) 
     { 
      Console.WriteLine("Wrong input"); 
      decimalInput = Console.ReadLine(); 
     } 

     decimal mVelocity = decimal.Parse(decimalInput); 
     return mVelocity; 
    }