it-swarm.com.de

Umwandlung von String in Dezimalzahl: Punkttrennung statt Komma

Ich habe eine Zeichenfolge aus einem Textfeld gelesen. Es enthält ein Komma für die Dezimaltrennung.

Ich habe NumberFormatInfo.CurrencyDecimalSeparator auf , (Komma) gesetzt, aber wenn ich die Zeichenfolge in dezimal Convert.ToDecimal(mystring); konvertiere, erhalte ich einen separaten Punkt für dezimal.

Beispiel:

decimal a=Convert.ToDecimal("1,2345"); ----> decimal is 1.2345

Ich habe auch versucht:

double a=Convert.ToDouble("1,2345"); 

aber wieder dezimal

26
LoveMyWife

Danke für alle Antwort.

Da ich eine Dezimalzahl in eine XML-Datei schreiben muss, habe ich das Problem herausgefunden. In this discussion habe ich erfahren, dass der XML-Dateistandard Punkt für den Dezimalwert verwendet, und dies ist kulturunabhängig . Meine Lösung ist also, eine Dezimalzahl in eine XML-Datei zu schreiben und den gelesenen String aus derselben XML-Datei zu konvertieren mystring.Replace(".", ","); Vielen Dank Agat für den Vorschlag, das Problem im XML-Kontext und Г И О zu untersuchen, da ich nicht wusste, dass Visual Studio die Kultureinstellungen, die ich in meinem Code habe, nicht respektiert . 

2
LoveMyWife

Das alles dreht sich um Kulturen. Wenn Sie eine andere Kultur als "US-Englisch" (und auch als gute Manieren der Entwicklung) haben, sollten Sie Folgendes verwenden:

var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US"));
// (or 1,2345 with your local culture, for instance)

(Natürlich sollten Sie "en-US" durch die Kultur Ihrer Zahl lokale Kultur ersetzen).

auf die gleiche Weise, wenn Sie ToString() tun möchten

d.ToString(new CultureInfo("en-US"));
27
Agat

Anstatt zu ersetzen, können wir Kultur wie erzwingen

var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," });

es wird 18.285 ausgegeben

15
Ashok Mandial

Ich habe diese Lösung verwendet.

decimal weeklyWage;
decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);
0
Gervo

Sie zeigen Ihre Dezimal- oder Doppelwerte in Visual Studio an. Das berücksichtigt nicht die Kultureinstellungen, die Sie in Ihrem Code haben.

Ändern Sie die Regions- und Spracheinstellungen in der Systemsteuerung, wenn Sie decimal- und double-Werte anzeigen möchten, die das Komma als Dezimaltrennzeichen enthalten.

0

Ich hatte ein ähnliches Problem bei der Verwendung von Convert.ToSingle (my_value). Wenn die Spracheinstellung des Betriebssystems Englisch ist, wird 2,5 (Beispiel) als 2,5 angenommen. Wenn die Sprache des Betriebssystems Deutsch ist, wird 2,5 als 2,5 behandelt, was 25 ist, die ich verwendet habe das invariantculture IFormat lieferte und es funktioniert. Es behandelt immer "." wie '.' statt ',' unabhängig von der Systemsprache.

float var = Convert.ToSingle (my_value, System.Globalization.CultureInfo.InvariantCulture);

0
Varma Naidu V