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
Seite 1 von 3  1 23      
ioster

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

Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:39
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:42
Ich vermute mal das ist ein Unicodeproblem. Ändere sden Typ mal auf AnsiString
Markus Kinzler
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:44
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:52
#0 in Strings weissen im Allgemeinen auf Unicode hin.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:53
Mit Delphi 2007? Das müsste dann aber irgendwas Selbstgestricktes sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ioster

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

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 11:58
Mit Delphi 2007? Das müsste dann aber irgendwas Selbstgestricktes sein.
Nein - Selbstgestricktes in Richtung Unicode ist nicht dabei. Ich habe jetzt den numerischen Wert direkt in die Funktion gegeben und einen korrekten String zurückerhalten. Als nächstes versuche ich es einmal mit einem Zugriff auf eine reelle Tabelle. Dann kann "nur" noch die Memtable das Problem erzeugen. Die Sourcen können natürlich inzwischen Schalter für Unicode haben. Das entzieht sich aber meiner Kenntnis.

Danke schon 'mal für die schnellen Antworten und Tipps.

Gruß
Ingo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 12:01
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.

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:
var
  d: Double;
  fs: TFormatSettings;
  s: string;
begin
  d := 4.5887305339;
  fs.DecimalSeparator := ',';
  s := FloatToStr(d, fs);
  ShowMessage(s);
Nun weiß Delphi was gewünscht ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 12:06
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 12: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
 
#10

AW: Floattostr wandelt Komma in #0

  Alt 15. Apr 2015, 12: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
Antwort Antwort
Seite 1 von 3  1 23      


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 23:53 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