2017-09-15 4 views
-1

Das C# Programm zum Vergleich in erhält einen String beschriftet:Konvertieren von Text in Integer C#

1.2345 V 

Ich brauche diesen Wert in einer 'if' Anweisung < oder> zu vergleichen. Wie konvertiere ich die obige Zeichenfolge in eine Ganzzahl? Ich habe versucht, zu verwenden:

int anInteger; 
anInteger = Convert.ToInt32(textBox1.Text); 
anInteger = int.Parse(textBox1.Text); 

Aber es führt den Fehler System.FormatException: incorrect format.

+1

Es ist _nicht_ eine ganze Zahl, sondern ein Doppel/Dezimalwert. Sie müssen auch das 'V' entfernen, bevor Sie es analysieren können. –

+0

Welchen ganzzahligen Wert erwarten Sie von' 1.2345 V'? – Rahul

+0

Möchten Sie nur die Zahlen oder hat das 'V' eine spezielle Bedeutung, da diese Zeichenfolge nicht in einen numerischen Wert konvertiert werden kann. – Jerodev

Antwort

0

Sie haben die V am Ende zu entfernen und decimal.Parse/TryParse verwenden:

decimal d; 
bool validFormat = decimal.TryParse(textBox1.Text.TrimEnd('V', ' '), out d); 

In meinem Land, das , als Dezimalzahl verwendet und . als Gruppentrenn ergibt dies 12345.

Wenn Sie stattdessen etwas ignorieren wollen, das keine Ziffer in einem String ist:

int number = int.Parse(new string(textBox1.Text.Where(char.IsDigit).ToArray())); 
+2

In C# 7 können Sie 'out decimal d' tun, um ein wenig zu sparen von Raum :) – Jaxi

+0

und Sie müssen möglicherweise invariant Kultur je nach Standort der Fragesteller –

+0

@YairHalberstadt verwenden: Nun, es funktioniert für mich, und ich verwende nicht '.' als Dezimaltrennzeichen. Das Ergebnis ist '12345', was ein bisschen komisch ist. –

1

Falls Sie auf integer bestehen (Punkt in 1.2345 shoud ignoriert und Endergebnis 12345):

// Any digits (including, say, Persian ones) are OK 
    int anInteger = (textBox1.Text 
    .Where(c => char.IsDigit(c)) 
    .Aggregate(0, (s, a) => s * 10 + (int)char.GetNumericValue(a)); 

Oder

// Only '0'..'9' digits supported 
    int anInteger = (textBox1.Text 
    .Where(c => c >= '0' && c <= '9') 
    .Aggregate(0, (s, a) => s * 10 + a - '0'); 
0

Bitte beachten Sie auch, dass abhängig von Ihren aktuellen Kultureinstellungen können Sie unterschiedliche Ergebnisse erhalten.

folgenden Code wurde mit de-DE Kultur laufen Einstellungen

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); 

string str = "1.23"; 
decimal val = decimal.Parse(str); 
val.Dump(); // output 123 

string str2 = "1,23"; 
decimal val2 = decimal.Parse(str2); 
val2.Dump(); // output 1,23 

folgenden Code mit en-US-Kultur durchgeführt wurde Einstellungen

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

string str = "1.23"; 
decimal val = decimal.Parse(str); 
val.Dump(); // output 1.23 

string str2 = "1,23"; 
decimal val2 = decimal.Parse(str2); 
val2.Dump(); // output 123 

Bitte benutzen Sie LINQPad diesen Code auszuführen.

0

Sie können versuchen -

decimal dec=2; 
string str = "3.23456"; 
dec = Convert.ToDecimal(str.ToString()); 
int a = Convert.ToInt32(dec);