# C# double - Punkt statt komma



## Karl Hermann (11. Jan 2014)

Moin,

hab' mal ne Frage zu C#
Und zwar möchte ich vom Benutzer eingegebene Double Werte gerne in einer mysql Datenbank abspeichern.
Bei C# wird allerdings nur ein komma (",") akzeptiert, in die Datenbank kann man jedoch nur mit Punkt (".") abspeichern.
Beispiel:
Benutzer gibt 1,2 ein.
In der double Variable steht dann auch 1,2 drinne.
Dieser Wert soll dann in die Datenbank gespeichert werden.
Dort steht aber dann nur 12 drinne, da mysql keine kommas akzeptiert sondern nur Punkte.
Versteht ihr was ich meine?

Bitte um Hilfe ???:L

Merci


----------



## Tobse (11. Jan 2014)

In der Double-Variable steht nicht "
	
	
	
	





```
1,2
```
 drinne". Da steht 
	
	
	
	





```
6/5
```
.
Dein Problem kannst du aber umgehen, indem du die umwandlung des doubles in einen String änderst:

```
public String doubleToString(double d)
{
    long i = (long) d;
    return i + ('.' + Double.ToString(d).substring(2));
}

Console.WriteLine(doubleToString(1.53562));
```


----------



## hans506 (1. Mrz 2015)

Der Typ des Variablen ist entscheidend... Ausserdem hängt es bei C# auch mit den Regional-Settings zusammen wie das Dezimaltrennzeichen interperetiert wird (als Punkt oder Komma)


----------



## hunni3 (12. Feb 2016)

würde es helfen, ein string.replace durchzuführen? Dann könntest du das Zeichen austauschen.


----------



## InfectedBytes (12. Feb 2016)

Tobse hat gesagt.:


> ```
> public String doubleToString(double d)
> {
> long i = (long) d;
> ...


Sehr problematische Methode. Sobald der Benutzer eine Zahl mit zwei Stellen vor dem Komma hat, ist schon alles zerschossen. Zudem ist long nicht in der Lage den großen Wertebereich von double abzudecken.
Viel einfacher wäre es mit string replace zu arbeiten

```
public String doubleToString(double d) {
  return d.ToString().Replace(',', '.');
}
```

p.s. @hunni3
du hast hier aber einen sehr alten Thread ausgegraben xD


----------



## kneitzel (12. Feb 2016)

Ich hätte da mal eine Frage 

Wie verwendest Du denn den double? Ich habe jetzt gerade das Gefühl, dass Du SQL Statements per String Concatenation zusammen stellst. Und da kann ich nur eins zu sagen: NEVER EVER DO THAT!
Also wirklich NIEMALS! Es gibt in meinen Augen keinen Grund, der sowas in irgend einer Weise rechtfertigt / erlaubt!

Hintergrund: Die Text-Darstellung von Werten (speziell Datum und Fließkommazahlen) ist immer abhängig von der Localization. Localization bezeichnet, wie ein User etwas dargestellt bekommen will.

In einer Applikation sollte jede Ausgabe und Eingabe im vom User gewünschten Format erfolgen. Der Benutzer stellt dies in seinem System / Useraccount ein und das zählt dann. D.h. der User gibt vor, wie eine Zahl dargestellt werden soll. Und wenn ich 12|345/78 für die Zahl 12.345,78 (Deutsche Darstellung, tausender Punkt und Komma für Nachkommastellen) haben will, dann will ich das haben. Bei C# sollte dies nie ein Thema sein. (Java kenne ich diese Thematik so noch nicht. Da wird es aber wohl auch sowas wie Localization geben!)

Und andere Systeme haben dann andere Einstellungen. Das kann die Kommunikation erschweren. Mal ganz von einfachen Problemen wie Sonderzeichen mal abgesehen. 

Es gibt eigentlich bei jeder Implementation die Übertragung von Parametern. Dies ist zwingend zu nutzen! Dann wird ein Float als Float übergeben. Nicht als Zeichenkette sondern sauber als Zahl.
Und ein String wird als String übergeben und es gibt keine Probleme mit " oder ' und so!
Und ein Datum ist ein sauberes Datum - unabhängig was für eine Darstellung ein User oder ein System erwarten.

Konrad


----------



## InfectedBytes (12. Feb 2016)

Der ganz saubere Weg wäre z.b. dieser hier:

```
d.ToString(CultureInfo.CreateSpecificCulture("en-US"))
```

p.s.


kneitzel hat gesagt.:


> Ich hätte da mal eine Frage


Ich bezweifel das du eine Antwort bekommen wirst, da der ursprüngliche Thread 2 Jahre alt ist und nur von hunni3 ausgegraben wurde^^


----------



## kneitzel (12. Feb 2016)

Jo, Frage passt auch nicht. Ist eher eine wichtige Anmerkung. Und wenn es um einen Zugriff auf eine Datenbank geht, dann ist das Umwandeln in einen String generell falsch! Wenn ich euch eine Datenbank bereitstellen müsste, dann würde ich die mit den irgendwelchen ganz dubiosen Lokalisierungen laufen lassen nur um zu schauen, wie hier versucht, die hin zu bekommen... also | als Tausender-Trennzeichen und / als "Komma" gefällt mir z.B. schon recht gut 

(Ja, ich bin so böse  Wenn jemand von mir einen Windows Server aufgebaut bekommen will, dann bekommt der auch ein chinesisches Setup vorgegeben.) 

Konrad


----------



## hunni3 (12. Feb 2016)

Ach Jungs.... ich hab mich hier doch angemeldet weil ich Hilfe bei Java brauche und ich da keine Ahnung von hab. Da dachte ich als .Net Progger könnte ich jedenfalls ein bisschen was zurück geben  
Aber ich hab erst beim Abschicken bemerkt wie alt der Beitrag war...


----------



## kneitzel (12. Feb 2016)

Ist doch auch nichts wildes. Du bist hier herzlich willkommen und das ging auch in keiner Weise gegen Dich.


----------

