![]() |
Floattostr wandelt Komma in #0
Ich habe eine Anwendung in Bearbeitung, die ich vor ein paar Jahren geschrieben habe. Dabei handelt es sich um eine Preiskalkulation, die mit einem Formelparser auch Feldinhalte mittels Formeln errechnen kann. Aufgemacht habe ich das Projekt, weil Änderungen gewünscht werden, die den eigentlichen Kern der Berechnungen gar nicht betreffen.
Nun habe ich aber das Problem, das an einer Stelle, an der Feldwerte mit SysUtils.FloatToStr in eine Zeichenkette umgewandelt werden, um in eine Formel einen Platzhalter ersetzen zu können, plötzlich merkwürdige Ergebnisse herauskommen. Aus 4,5887305339 macht die Funktion '4'#0'58873053386861'. Das dabei Berechnungen auf die Bretter gehen, dürfte klar sein. Nur warum wird aus einem Komma "#0"? Mit der Entwicklungsumgebung DELPHI 2007 arbeite ich tagtäglich. Komponenten sind auch nicht hinzugekommen. Der Wert wird in einer KbmMemtable Version 7.18.00 gespeichert. Ich muss allerdings dazu sagen, dass ich auf dem PC .NET Framework 4.0 installieren musste, weil es mein Virenscanner von Kasperky verlangte. Kann das die Delphi-Routinen beeinflussen? Ich arbeite schon etliche Jahre mit DELPHI, habe so etwas aber auch noch nicht gesehen. Gruß Ingo |
AW: Floattostr wandelt Komma in #0
Ich vermute mal das ist ein Unicodeproblem. Ändere sden Typ mal auf AnsiString
|
AW: Floattostr wandelt Komma in #0
Verstehe nicht was Unicode damit zu tun haben soll. Ich hätte eigentlich gedacht dass du entweder deine Anwendungs-eigenen FormatSettings.DecimalSeparator umgestellt hast (wohl kaum, aber prüfe das doch mal), oder jemand deinen windows-weiten Decimalseparator.
|
AW: Floattostr wandelt Komma in #0
#0 in Strings weissen im Allgemeinen auf Unicode hin.
|
AW: Floattostr wandelt Komma in #0
Mit Delphi 2007? Das müsste dann aber irgendwas Selbstgestricktes sein.
|
AW: Floattostr wandelt Komma in #0
Zitat:
Danke schon 'mal für die schnellen Antworten und Tipps. Gruß Ingo |
AW: Floattostr wandelt Komma in #0
Zitat:
Aber egal. Ich weiß nicht warum, aber anscheinend steht irgendwo in den Einstellung ein #0 als Dezimaltzrennzeichen eingetragen. Wenn du entscheiden willst was das Dezimaltrennzeichen sein soll, dann musst du es der Formel sagen. Hier mal aus dem Kopf:
Delphi-Quellcode:
Nun weiß Delphi was gewünscht ist.
var
d: Double; fs: TFormatSettings; s: string; begin d := 4.5887305339; fs.DecimalSeparator := ','; s := FloatToStr(d, fs); ShowMessage(s); |
AW: Floattostr wandelt Komma in #0
Ich vermute auch eher, daß dort das globale FormatSettings futsch ist. -> "jemand" hat #0 als Dezimaltrenner deklariert
* Tausendertrenner = #0 geht, denn das besagt, daß es keinen Tausendertrenner gibt (Dezimaltrenner gibt es aber immer) * oder jemand übergibt ein defektes FormatSettings via Parameter an FloatToStr. |
AW: Floattostr wandelt Komma in #0
Zitat:
"[Fertigungskosten] + [Materialzuschlag]" => "10 + 4'#0'58873053386861" Dieser String wird dann in einen Formelparser weitergereicht, der dann den numerischen Wert zurückgibt. Gruß Ingo |
AW: Floattostr wandelt Komma in #0
Verstehe. Aber wenn du mit einem Parser arbeitest, ist es um so wichtiger mit TFormatSettings zu arbeiten, denn sonst arbeitet das Programm nur zufällig richtig. Denn wenn dein Parser ein Komma "," als Dezimaltrennzeichen erwartet und plötzlich arbeitet ein Schweizer damit (da ist es üblich Punkt "." als Trennzeichen zu nehmen), gibt es Probleme.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz