AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Floattostr wandelt Komma in #0

Ein Thema von ioster · begonnen am 15. Apr 2015 · letzter Beitrag vom 16. Apr 2015
Antwort Antwort
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:08
Zitat:
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"?
Warum gehen Berechnungen auf die Bretter, weil du mit FloatToStr einen String generierst? Ob im String die Zahl ob die erste Zeile von Pippi Langstrumpf Lied steht, sollte dem Programm doch egal sein, denn du rechnest ja mit der Zahl und nicht mit dem String. Andersherum wäre es kritisch.
Die Berechnungen gehen auf die Bretter, weil die Werte in fertige Formeln eingesetzt werden also

"[Fertigungskosten] + [Materialzuschlag]" => "10 + 4'#0'58873053386861"

Dieser String wird dann in einen Formelparser weitergereicht, der dann den numerischen Wert zurückgibt.

Gruß
Ingo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:25
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.
  Mit Zitat antworten Zitat
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:42
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.
Ja - das Schwizer Problem habe ich schon in einem anderen Projekt gehabt. Dort hat man sich noch mehr auf "." und "," verlassen und als dann die Anwendung auf Schweizer Zahlenformat gestellt war, kamen nicht unerhebliche Rundungen zustande Die haben als Tausenderzeichen ein Hochkomma und als Dezimaltrenner den Punkt.

Nun - das mit den Formatsettings ist der entscheidende Tipp gewesen. Dort steht als Dezimaltrenner tatsächlich #0 drin, wobei ich mir nicht erklären kann, an welcher Stelle das geändert worden sein kann. Ich habe nun Deinen Hinweis mit der Definition des Dezimaltrenners vor die Funktion gesetzt und alles ist gut. Jetzt spuckt der Parser, aber das ist das Folgeproblem, auf das Du an dieser Stelle hingewiesen hast.

Ich denke, wir können den Thread hiermit zumachen. Danke für Eure Tipps.

Gruß
Ingo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#4

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 12:27
Ich habe nun Deinen Hinweis mit der Definition des Dezimaltrenners vor die Funktion gesetzt und alles ist gut.
Ich hoffe du hast nicht die globale Variable davor geändert, denn genau das wäre falsch/fatal.

Es wird nicht umsonst gesagt, daß globale Variablen böse sind.
Und man sollte niemals grundlos an globalen Settings rumschrauben.

Zuerst suchst du mal, wo dein Setting kaputt geht und reparierst das.
Und dann benutzt du dort, wo du selber mit einem "Sonderformat" hantierst, den Settings-Parameter der jeweiligen Umwandlungsfunktionen.
Delphi-Referenz durchsuchenFloatToStr
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Apr 2015 um 12:38 Uhr)
  Mit Zitat antworten Zitat
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 13:27
Ich habe jetzt eine Funktion ausgeklammert, die die Ergebnisse der Berechnung mit SMExport-Komponenten abspeichert. Die scheint in ihren Tiefen eine Umformatierung des Settings vorzunehmen. Werde den Support von Scalabium dazu befragen. Merkwürdig nur, dass das mit einem Mal so auftaucht und bisher in keinem anderen Projekt Probleme verursacht hat.

Gruß
Ingo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 13:41
Zitat:
Die scheint in ihren Tiefen eine Umformatierung des Settings vorzunehmen.
ioster, das ist egal. Nicht wirklich wichtig. Deshalb gibt es auch die erweiterten StrToFloat, FloatToStr, StrToDate, DateToStr, usw. Funktionen. Es gibt immer die einfache Version, die man nehmen kann, die aber nicht sicher ist, da sie dann mit den länderspezifischen Separatoren arbeiten, und die erweitere.

Selbst wenn da irgendwo in den Tiefen eine Änderung vorgenommen wird, wenn man mit eigenen TFormatSettings arbeitet, erlebt man keine Überschungen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#7

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 13:54
Sicher sind die einfachen Funktionen schon.
Wenn man eine Zahl so ausgibt und auch so wieder einliest, dann gibt es keine Probleme, da ja das selbe Setting wieder benutzt wird.

Wenn man aber ein bestimmtes Format benötigt oder wenn man Daten speichern, bzw. übertragen (anderes Programm/Rechner) will,
dann muß man Dieses immer in einem definierten Format tun. (oder muß das Format mit übergeben, bei Speicherung/Übertragung)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 15:22
Zitat:
Die scheint in ihren Tiefen eine Umformatierung des Settings vorzunehmen.
ioster, das ist egal. Nicht wirklich wichtig. Deshalb gibt es auch die erweiterten StrToFloat, FloatToStr, StrToDate, DateToStr, usw. Funktionen. Es gibt immer die einfache Version, die man nehmen kann, die aber nicht sicher ist, da sie dann mit den länderspezifischen Separatoren arbeiten, und die erweitere.

Selbst wenn da irgendwo in den Tiefen eine Änderung vorgenommen wird, wenn man mit eigenen TFormatSettings arbeitet, erlebt man keine Überschungen.
Ich muss nochmal ganz blöd nachfragen, was TFormatSettings betrifft, weil ich da bisher nicht mit gearbeitet habe. Wenn ich das Beispiel von popov nutze, manipuliere ich dann die Standardeinstellungen des Systems? Muss ich mir mit TFormatSettings.Create eine eigene erstellen, die ich dann für Funktionsaufrufe nutze?

Das Programm läuft nun, nachdem ich in meiner Funktion vor FloatToStr die Separatoren umsetze. Allerdings musste ich dasselbe im Formelparser machen, weil dort StrToFloat aufgerufen wird. Das ging durch die Anpassungen auch in die Hose.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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