Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Gleitkommazahlen mit Punkt statt Komma (https://www.delphipraxis.net/176191-gleitkommazahlen-mit-punkt-statt-komma.html)

Erutan 19. Aug 2013 01:36

Delphi-Version: 5

Gleitkommazahlen mit Punkt statt Komma
 
Hallo,

ich würde gerne einen Wert aus einem Delphiprogramm mittels IdHTTP an meinen Internetserver senden lassen wo es von einem php-script in eine MySQL-Datenbank geschrieben wird.

Es handelt sich bei diesem Wert nur um eine Gleitkommazahl (Float) mit zwei Nachkommastellen, in der Form: 0,92.

Ein weiteres php-script liest diese Zahl, zusammen mit einigen weiteren hundert Zahlen in eine Tabelle ein und soll damit rechnen. Es soll ein Durschschnitt berechnet werden indem alle Zahlen aufadiert und dann durch die Anzahl der Zahlen geteilt werden. Daher kann ich (denke ich) die Werte auch nicht als String übertragen oder in der Datenbank speichern.

Nun erwartet die MySQL Datenbank allerdings ein anderes Format als Delphi ausspuckt. Lasse ich mir nämlich den ermittelten Wert, der übertragen werden soll, als Label anzeigen, so stet da ein Wert mit einem Komma. MySQL will bei Float aber einen Wert mit einem Punkt statt des Kommas.

Die Berechnung findet hier statt:

Delphi-Quellcode:
ergebnis := werter / sec ;
ergebnis := ergebnis*100;
ergebnis := round(ergebnis);
ergebnis := ergebnis/100;
Label4.Caption := 'Auswertung: ' + FloatToStr(ergebnis);
(Die Multiplikation mit 100, das kaufmännische Runden und die Division durch 100 findet statt um das Ergebnis auf zwei Nachkommastellen zu beschränken.)

Die Variable "werter" ermittelt wie oft ein bestimmtes Ereignis eintritt. Sie wird durch die vertrichene Zeit (sec) geteilt.
Das Ergebnis (ergebns) soll dann in die MySQL-Datenbank geschrieben werden damit ein php-script mit diesen Werten in Echtzeit statistische Berechnungen anstellen kann.

Nur nimmt MySQL keine Floatzahlen mit Komma statt Punkt an. Der Wert bleibt dann einfach 0.

Thom 19. Aug 2013 02:00

AW: Gleitkommazahlen mit Punkt statt Komma
 
Setze den Wert
Delphi-Quellcode:
DecimalSeparator:='.';

Medium 19. Aug 2013 02:01

AW: Gleitkommazahlen mit Punkt statt Komma
 
Es gibt von FloatToStr() eine überladene Version mit 2 Parametern. Der zweite ist vom Typ TFormatSettings, in dem du u.a. festlegen kannst, welches Zeichen als Dezimalseparator bei der Umwandlung benutzt werden soll.

Edit: Die Variante von Thom geht auch, nur wird damit das Zeichen global für dein gesamtes Programm geändert. Das kann u.U. dann Probleme an anderen Stellen machen. Man kann es natürlich wieder zurück setzen nachdem man fertig ist, aber sauberer ist imho die Benutzung der Überladung.

Erutan 19. Aug 2013 02:46

AW: Gleitkommazahlen mit Punkt statt Komma
 
Cool, das funktioniert.

Danke Euch beiden. Ich habe die erste Möglichkeit gewählt. In diesem Fall ist es nicht schlimm wenn sich der Wert global ändert.

Uwe Raabe 19. Aug 2013 08:12

AW: Gleitkommazahlen mit Punkt statt Komma
 
Zitat:

Zitat von Erutan (Beitrag 1225264)
Ich habe die erste Möglichkeit gewählt. In diesem Fall ist es nicht schlimm wenn sich der Wert global ändert.

Aber vielleicht im nächsten?

DeddyH 19. Aug 2013 09:36

AW: Gleitkommazahlen mit Punkt statt Komma
 
IIRC gab es die überladene Variante unter Delphi 5 noch gar nicht.

hstreicher 19. Aug 2013 11:28

AW: Gleitkommazahlen mit Punkt statt Komma
 
Ohne sich Globale Probleme einzufangen kann man das ganz einfach mit einem StringReplace machen

mfg Hannes

arnof 19. Aug 2013 11:47

AW: Gleitkommazahlen mit Punkt statt Komma
 
.....

hstreicher 19. Aug 2013 12:14

AW: Gleitkommazahlen mit Punkt statt Komma
 
Modernere Delphis bieten dafür den Datentyp Currency und dann isses kein Problem mehr

mfg Hannes

arnof 19. Aug 2013 12:22

AW: Gleitkommazahlen mit Punkt statt Komma
 
es gibt ja auch andere Währungen, da muss man trotzdem von Hand ran und man kann sich nicht darauf verlassen!

Ausserdem gilt dies auch für alle Datenbanken :idea:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 1 von 2  1 2   

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