Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C++ TStringList nimmt double's falsch an! (https://www.delphipraxis.net/75452-tstringlist-nimmt-doubles-falsch.html)

Chefsalat 19. Aug 2006 10:29

Datenbank: MySQL • Zugriff über: ZEOS

TStringList nimmt double's falsch an!
 
Hallo zusammen,
ich hab folgendes Problem.
Zum Update eines Eintrages in der Datenbank bekomme ich einen double-Wert.
Diesen muss ich in eine TStringList schreiben und dann die Datenbank updaten.

Im double-Wert steht z.b.: 12.22
Wenn ich diesen double-Wert in die TStringList adde, wird daraus 12,22 gemacht.
Die MySQL Datenbank braucht aber 12.22!
Ich hab schon probiert, den Vor- und Nachkommateil zu separieren und dann quasi von Hand ein Punkt dazwischen zu machen.
Aber das funktioniert auch nicht.

Wenn ich von Hand 12.22 im Code in die TStringList eintrag, funktioniert es.

Hat jemand ne Idee, an was es liegen könnte??

Gruß Chefsalat

Elvis 19. Aug 2006 10:37

Re: TStringList nimmt double's falsch an!
 
Setze den Dezimaltrenner in deinem Programm entweder so wie er in der DB ist. Aber das ist bescheuert für den User, der das nicht umsonst so eingestellt hat.
Ich hab's gerade nicht im Kopf, aber es gibt sicherlich auch eine Konvertierungsfunktion für Double -> String, die als Parameter ein Format oder einen Dezimaltrenner schluckt.

Normalerweise sollten DB Client und das lokale System mit den gleichen Regionaleinstellungen laufen. Denn dieser Unterschied 12.2 <-> 12,2 kann nur durch einen verkorkste Client Installation entstehen.
Falls du keine Kontrolle über den DB Client auf dem Zielsystem hast, musst du zwangsläufig immer zwischen den lokalen Regionaeinstellungen und denen des Clients konvertieren.
Wenn du einfach den Double als Double herausholst und auch in SQL-Parametern als Double benutzt, solltest du a) keine mehr Probleme haben und b) witzlose Umwandlungen einsparen.

Phoenix 19. Aug 2006 10:40

Re: TStringList nimmt double's falsch an!
 
Zitat:

Zitat von Elvis
Wenn du einfach den Double als Double herausholst und auch in SQL-Parametern als Double benutzt, solltest du a) keine mehr Probleme haben und b) witzlose Umwandlungen einsparen.

Hi. Ich befürchte ich kenne die Umgebung. Da wird ein SQL-Statement als String zusammengebaut und an die DB geschickt. Ist also nix mit Double direkt übergeben.

Elvis 19. Aug 2006 10:55

Re: TStringList nimmt double's falsch an!
 
Zitat:

Zitat von Phoenix
Hi. Ich befürchte ich kenne die Umgebung. Da wird ein SQL-Statement als String zusammengebaut und an die DB geschickt. Ist also nix mit Double direkt übergeben.

Dann muss er es ja nur noch richtig machen und gut ist. ;)

thkerkmann 19. Aug 2006 11:03

Re: TStringList nimmt double's falsch an!
 
Hi,

Zeig doch mal, wie du den double in die Stringlist addest.
Es kommt ja nicht ein Dezimalkomma von alleine rein, wenn Du es selbst zusammenbaust.

Ich würd's so machen:
Delphi-Quellcode:

  einString := StringReplace(FloatToStr(einDouble),DecimalSeparator,'.',[]);

  strList.Add(einString);
Dann sollte doch der double mit Dezimalpunkt im String stehen und nicht mit Komma.

Gruss

Thomas

//edit: Oh, sorry, hab die falsche Sprache genommen, aber so ähnlich geht's ja auch in C++ //edit

Phoenix 19. Aug 2006 11:05

Re: TStringList nimmt double's falsch an!
 
Es gibt doch die schöne Variable
Code:
DecimalSeparator
die man auf '.' setzen kann. Und schon funzt FloatToStr wie gewünscht *g*

Chefsalat 19. Aug 2006 11:09

Re: TStringList nimmt double's falsch an!
 
So hab haben wir es auch gemacht, gelle?

Gruß Chefsalat

Elvis 19. Aug 2006 11:09

Re: TStringList nimmt double's falsch an!
 
Zitat:

Zitat von Phoenix
Es gibt doch die schöne Variable
Code:
DecimalSeparator
die man auf '.' setzen kann. Und schon funzt FloatToStr wie gewünscht *g*

Wie gesagt, das ist bescheuert für den User. Denn alle Dezimalwerte in Controls werden dann ebenfalls mit dem Trenner dargestellt.

Sharky 19. Aug 2006 15:27

Re: TStringList nimmt double's falsch an!
 
Hai Chefsalat,

warum speicherst Du deinen Zahlenwerte denn als String in einer TStringList?
Wenn Du diese (unnötige) Umwandlung vermeidest wirst Du auch keine Probleme mehr haben die Daten in die Datenbank zu schreiben.

Lemmy 19. Aug 2006 17:46

Re: TStringList nimmt double's falsch an!
 
@Sharky: Glaub mir, es gibt dafür Gründe....

In Delphi kannst Du mit einer überladenen Funktion von FloatToStr() die "FormatSettings" mitgeben. Die musst Du erst mal auslesen und kannst dann das Komma evtl. durch den Punkt ersetzen. Damit Du das nicht 10 Mio. mal im Code machen musst, kannst Du dir ja ne eigene Funktion FloatTOStr schreiben, die genau das macht....

Grüße
Lemmy


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz