2013-07-22 16 views
5

Mein Code ist wie dieseint.TryParse nicht funktionieren

string asd = "24000.0000"; 
int num2; 
if (int.TryParse(asd, out num2)) 
{ 

    // It was assigned. 
} 

Jetzt Codeausführung tritt nie auf, wenn Fall, das heißt Parse versuchen funktioniert nicht. Kann mir jemand sagen, was mit dem Code falsch ist?

Hinweis: Im ersten Schritt wird der Wert 24000.0000 gezielt als String zugewiesen.

+5

Muss ich fragen, warum wird diese Frage abgelehnt? –

+0

Was ist int.MaxValue auf Ihrem System? Was sind deine Kultureinstellungen, insbesondere? der Dezimaltrenner oder ein anderer Trenner in deinen Kultureinstellungen? – Dominik

+0

@KaushalDeSilva - nicht downvote, aber vielleicht weil einfach das Lesen [Int32.TryParse] (http://msdn.microsoft.com/library/f02979c7.aspx) hätte die Frage beantwortet. – Corak

Antwort

9

Verwenden Sie die zweite TryParse Überladung, mit der Sie NumberStyle Parameter für Dezimalstellen angeben können.

int val =0; 
var parsed = int.TryParse("24000.0000", 
       NumberStyles.Number, 
       CultureInfo.CurrentCulture.NumberFormat, 
       out val); 
+1

Danke..out von all diesen Antworten machte dies einen Unterschied in meiner Situation .. – Athul

+1

Ich würde dringend empfehlen, den 'NumberStyles.Number' Wert stattdessen zu verwenden, da es auch Leerraum, Tausende abdecken wird Separatoren, und vielleicht am wichtigsten von allen: negative Zeichen. Wie es jetzt ist, wird die Eingabe von "-24000.0000" fehlschlagen. –

+0

@ChrisSinclair Oh nett, danke für den Tipp. – asawyer

8

Für eine int können Sie keine Dezimalstellen haben.

EDIT:

string asd = "24000.000"; 

int dotPos = asd.LastIndexOf('.'); 

if (dotPos > -1) { 
    asd = asd.Substring(0, dotPos); 
} 

int num2; 

if (int.TryParse(asd, out num2)) 
{ 
// It was assigned. 
} 

EDIT:

Wie schon in anderen Antworten erwähnt, gibt es bessere Möglichkeiten bei der Umstellung zu bewältigen.

+0

Können Sie mir bitte sagen, welche Arbeit ich tun kann, um Dezimalstellen zu entfernen und es zu einer Ganzzahl zu machen, damit ich einige mathematische Berechnungen daran machen kann. – Athul

+1

@AthulKSurendran: Die einfachste Lösung ist [diese Überladung] (http://msdn.microsoft.com/en-us/library/zf50za27.aspx): 'if (int.TryParse (asd, NumberStyles.Number, null, out num2)) ' –

+0

@ChrisSinclair Cool. Ich kann mich nie an all die Überladungen für diese Konvertierungen erinnern. Cheers für das zeigen, dass du bist :) –

2

Dies sollte für Sie arbeiten:

string asd = "24000.0000"; 
int num2; 
decimal tmpNum; 
if (decimal.TryParse(asd, out tmpNum)) 
{ 
    num2 = (int)tmpNum; 
    // It was assigned. 
} 
2

Sie haben es gebeten, einen int zu analysieren, aber geben Sie ihm double oder float. Da die Nummer nicht analysiert werden kann, wird false zurückgegeben und num2 auf Null gesetzt.