Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - '-13.916' kein gültiger Gleitkommawert
Martello - Sa 21.03.09 00:09
Titel: '-13.916' kein gültiger Gleitkommawert
Warum zum Deiphi ist '-13.916' kein gültiger Gleitkommawert?
Mo.
JayEff - Sa 21.03.09 00:10
Vielleicht ist DecimalSeparator = ',' ? :nixweiss:
Martello - Sa 21.03.09 00:16
JayEff hat folgendes geschrieben : |
Vielleicht ist DecimalSeparator = ',' ? :nixweiss: |
Hatte ich auch schon probiert. Aber der Standard ist Dezimalpunkt, und daran liegt es definitiv nicht :cry:
JayEff - Sa 21.03.09 00:19
Delphi-Quelltext
1: 2: 3: 4:
| var x : Extended; begin x := -13.916; |
klappt bei mir :nixweiss:
edit: erst bei der Nutzung von StrToFloat wird's abhängig vom Systemstandard:
x := StrToFloat('-13,916'); klappt, mit . nicht.
Manina - Sa 21.03.09 00:22
Du hast doch nicht etwa die Hochkommas mit im Quelltext ? :oops:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var f : Double; begin f := '-13.916'; f := -13.916; end; |
Martello - Sa 21.03.09 00:28
JayEff hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| var x : Extended; begin x := -13.916; | klappt bei mir :nixweiss:
edit: erst bei der Nutzung von StrToFloat wird's abhängig vom Systemstandard: x := StrToFloat('-13,916'); klappt, mit . nicht. |
Ich hatte den gleichen Test durchgeführt :wink:
... und bei der Nutzung von StrToFloat kommt die Fehlermeldung. Blöd.
Wo oder wie kann ich den Systemstandard modifizieren, da hier offensichtlich der Hund begraben liegt...
Mo.
jaenicke - Sa 21.03.09 00:35
Martello hat folgendes geschrieben : |
Wo oder wie kann ich den Systemstandard modifizieren, da hier offensichtlich der Hund begraben liegt... |
Wenn mir ein Programm den für das gesamte System verändern würde, dann würde das Programm aber sowas von schnell von der Festplatte fliegen...
Wie du die Einstellung für dein Programm änderst, hat
JayEff doch gleich als erstes praktisch schon geschrieben. Also welche Variable das ist.
Die Frage ist aber eher woher der Wert kommt, vielleicht kann man da gleich für das richtige Format sorgen.
F34r0fTh3D4rk - Sa 21.03.09 00:36
Ich denke mal, dass du schauen solltest wie du den Systemstandard erfragst und da wurde schon der
DECIMAL SEPARATOR genannt, der wahrscheinlichsterweise
(interessante neue Wortkonstruktion) für dein Problem verantwortlich ist.
mfg
Martello - Sa 21.03.09 00:50
jaenicke hat folgendes geschrieben : |
Die Frage ist aber eher woher der Wert kommt, vielleicht kann man da gleich für das richtige Format sorgen. |
Der Punkt kommt aus der Input-Datei.txt. Und der alte TP-Code innerhalb meiner UNIT1 verarbeitet nur Dezimalpunkte richtig, so wie ich es aus TP kenne.
Der String heißt "zeile"
Delphi-Quelltext
1: 2:
| edit1.text:=zeile; PaintBox1.Canvas.LineTo(j,round(strtofloat(zeile))); |
und mit edit1.text:= zeile wollte ich mir den Wert anzeigen lassen, aber in Edit1 erscheint kein String :cry:
Mo.
JayEff - Sa 21.03.09 01:10
Schreib dir doch ein eigenes MyStrToFloat in dem du per TryStrToFloat prüfst ob's geht, und falls nicht, per StringReplace(alt, '.', ',', [rfReplaceAll); den Punkt durch ein Komma ersetzt :)
Dein Quellcode suggestiert, dass 'zeile' leer ist. Vielleicht liegt der Fehler ja da, zeig doch mal ein bisschen mehr relevantes? Vielleicht ließt du die Datei in einer Schleife aus und der Fehler tritt bei einer Leerzeile auf, die am Ende der Datei sitzt?
jaenicke - Sa 21.03.09 01:36
Martello hat folgendes geschrieben : |
Der Punkt kommt aus der Input-Datei.txt. Und der alte TP-Code innerhalb meiner UNIT1 verarbeitet nur Dezimalpunkte richtig, so wie ich es aus TP kenne. |
Dann setz doch einfach den Dezimalseparator und das Tausendertrennzeichen entsprechend, wenn du sicher bist, dass das Format der Daten immer so ist.
mkinzler - Sa 21.03.09 09:28
Oder verwende (wenn durch deine Delphiversion unterstützt) die überladenen Version der Konvertierungsfunktion mit angabe der Formateinstellungen
Martello - Sa 21.03.09 12:02
jaenicke hat folgendes geschrieben : |
Martello hat folgendes geschrieben : | Der Punkt kommt aus der Input-Datei.txt. Und der alte TP-Code innerhalb meiner UNIT1 verarbeitet nur Dezimalpunkte richtig, so wie ich es aus TP kenne. | Dann setz doch einfach den Dezimalseparator und das Tausendertrennzeichen entsprechend, wenn du sicher bist, dass das Format der Daten immer so ist. |
Der Fehler tritt doch in der selben UNIT1 auf, in der der Dezimalpunkt (vom alten Code) korrekt verwendet wird.
Erst die Funktion StrToFloat liefert die Fehlermeldung, gleich beim ersten Wert übrigends und nicht erst am Ende der Input-Datei. Aber stutzig macht mich auch die Tatsache, daß edit1 leer bleibt. Ich habe diese Zuweisung nämlich nur als Kontrolle vor die störrische geschrieben.
Martello - Sa 21.03.09 12:04
mkinzler hat folgendes geschrieben : |
Oder verwende (wenn durch deine Delphiversion unterstützt) die überladenen Version der Konvertierungsfunktion mit angabe der Formateinstellungen |
Das würde ich mir gerne für ein fortgeschritteneres Lernstadium vorbehalten :wink:
Martello - Sa 21.03.09 12:12
JayEff hat folgendes geschrieben : |
Schreib dir doch ein eigenes MyStrToFloat in dem du per TryStrToFloat prüfst ob's geht, und falls nicht, per StringReplace(alt, '.', ',', [rfReplaceAll); den Punkt durch ein Komma ersetzt :)
Dein Quellcode suggestiert, dass 'zeile' leer ist. Vielleicht liegt der Fehler ja da, zeig doch mal ein bisschen mehr relevantes? Vielleicht ließt du die Datei in einer Schleife aus und der Fehler tritt bei einer Leerzeile auf, die am Ende der Datei sitzt? |
zeile ist ein String, nur solche Zahlen wie z.B. -13.916 stehen in der Text-Datei inn, die hier ausgelesen wird
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| repeat
readln(pkt,zeile); val(zeile,zeiger,code);
reset(inn); for i:= 1 to zeiger-4 do readln(inn,zeile); for j:= 1 to arr do begin
readln(inn,zeile); if zeile[6]=#09 then zeile:= copy(zeile,1,5); edit1.text:=zeile; PaintBox1.Canvas.LineTo(j,round(strtofloat(zeile)));
write(out,zeile,#9) end; writeln(out);
until eof(pkt); |
jaenicke - Sa 21.03.09 16:09
Martello hat folgendes geschrieben : |
Der Fehler tritt doch in der selben UNIT1 auf, in der der Dezimalpunkt (vom alten Code) korrekt verwendet wird.
Erst die Funktion StrToFloat liefert die Fehlermeldung, gleich beim ersten Wert übrigends und nicht erst am Ende der Input-Datei. |
Wenn die alten Turbo Pascal Funktionen nicht die Systemeinstellungen verwenden...
Welcher Code funktioniert denn bei der Umwandlung korrekt?
Martello hat folgendes geschrieben : |
Aber stutzig macht mich auch die Tatsache, daß edit1 leer bleibt. Ich habe diese Zuweisung nämlich nur als Kontrolle vor die störrische geschrieben. |
Wenn bei StrToFloat nicht der richtige Wert ankommen würde, dann würde ja auch nicht die Fehlermeldung mit dem richtigen Wert angezeigt werden. ;-)
Martello - Sa 21.03.09 21:09
jaenicke hat folgendes geschrieben : |
Wenn bei StrToFloat nicht der richtige Wert ankommen würde, dann würde ja auch nicht die Fehlermeldung mit dem richtigen Wert angezeigt werden. ;-) |
Interessant ist ja, daß der Sting in edit1.text angezeigt wird, wenn ich ihn testweise kurz zuvor als
'-13,916' definiere. Dann bleibt auch die Fehlermeldung aus. Somit ist '-13,916' ein String und eine korrekte Floatzahl wohingegen '-13.916' weder String noch eine korrekte Floatzahl ist :?. Blöd bleibt natürlich die Tatsache, daß die TP-Funktionen nur mit Dezimalpunkt arbeiten, Delphi aber Kommata erwartet.
Ich erwarte eine aktuellere Delphi-Version als CD-Beilage zu einem populären Lernbuch, das ich gestern bestellt habe. Oder kann ich auch in der Version 1.0 bereits irgendwo "Punkt" als Dezimaltrenner definieren?
jaenicke - Sa 21.03.09 21:15
Martello hat folgendes geschrieben : |
Ich erwarte eine aktuellere Delphi-Version als CD-Beilage zu einem populären Lernbuch, das ich gestern bestellt habe. Oder kann ich auch in der Version 1.0 bereits irgendwo "Punkt" als Dezimaltrenner definieren? |
Version 1.0? :shock:
Nimm doch das kostenlose und sehr gute Turbo Delphi (das ist Delphi 2006 Professional ohne Unterstützung für zusätzliche Packages):
http://www.delphi-library.de/viewtopic.php?p=539975
Das ist ohnehin viel komfortabler als die alte Delphi 7 PE, die in einem Buch mal dabei war.
Martello hat folgendes geschrieben : |
Blöd bleibt natürlich die Tatsache, daß die TP-Funktionen nur mit Dezimalpunkt arbeiten, Delphi aber Kommata erwartet.
[...]
Oder kann ich auch in der Version 1.0 bereits irgendwo "Punkt" als Dezimaltrenner definieren? |
Gibt es denn die bereits mehrfach angesprochene Variable DecimalSeparator usw. noch nicht bei dir? Hast du das denn getestet?
Martello - Sa 21.03.09 21:31
jaenicke hat folgendes geschrieben : |
Gibt es denn die bereits mehrfach angesprochene Variable DecimalSeparator usw. noch nicht bei dir? Hast du das denn getestet? |
Die Hilfe kennt diesen Begriff jedenfalls noch nicht. Ich glaube, ich warte lieber mal ein Weilchen bis ich ein aktuelleres Delphi habe. A propos Turbo Delpbi: Ich hatte das bereits downgelaodet und die Installation gestartet. Als er dann aber nach und nach aufforderte zuerst WE6 und dann irgend ein NET zu installieren, habe ich wieder abgebrochen und alles von der Platte gelöscht. Vielleicht probier ich's nochmal, wenn du von der 7PE abrätst, ich glaube nämlich, genau die wird mit dem Buch geliefert...
jaenicke - Sa 21.03.09 21:39
Martello hat folgendes geschrieben : |
Als er dann aber nach und nach aufforderte zuerst WE6 und dann irgend ein NET zu installieren, habe ich wieder abgebrochen und alles von der Platte gelöscht. Vielleicht probier ich's nochmal, wenn du von der 7PE abrätst, ich glaube nämlich, genau die wird mit dem Buch geliefert... |
Der Delphi 7 PE fehlen sehr sehr viele Funktionen, die das neuere Turbo Delphi schon hat.
Einziger wirklich großer Vorteil von Delphi 7: Es läuft auch noch unter Windows 98/ME und es ist sehr schnell beim Start.
Voraussetzung für Turbo Delphi sind die Microsoft.NET 1.1 Runtime und das 1.1 SDK, die J# Runtime, MSXML und der InternetExplorer 6.01 oder höher (wobei der IE ja schon aus Sicherheitsgründen ohnehin aktuell sein müsste).
Martello - Sa 21.03.09 21:47
jaenicke hat folgendes geschrieben : |
Voraussetzung für Turbo Delphi sind die Microsoft.NET 1.1 Runtime und das 1.1 SDK, die J# Runtime, MSXML und der InternetExplorer 6.01 oder höher (wobei der IE ja schon aus Sicherheitsgründen ohnehin aktuell sein müsste). |
Vor der Installation müssen unbedingt zuerst diese Dinger installiert werden, behauptet die Installtion:
ZITAT
Microsoft .NET Framework v1.1 Redistributable
Sprachpaket Deutsch für Microsoft .NET Framework v1.1
Microsoft .NET Framework v1.1 SP1
Microsoft .NET SDK v1.1
Microsoft Internet Explorer 6 SP1
Microsoft Visual J# v1.1 Redistributable
Sprachpaket für Microsoft Visual J# .NET Redistributable Package v1.1
Microsoft XML Core Services (MSXML) v4.0 SP2
Diese Software ist auch in einer einzigen Zip-Datei HIER als Download verfügbar.
ZITAT ENDE
"HIER" gibt es aber gar nicht mehr. Muß es nun die ganze Liste sein, oder genügt die Auswahl, die Du genannt hast?
IE6 hab ich bereits...
Mo.
Martello - Sa 21.03.09 21:53
error
jaenicke - Sa 21.03.09 21:55
Ja, die SPs und so habe ich in der Auflistung weggelassen, weil ich die auswendig nicht wusste. Brauchen tust du die schon, aber das musst du ja nicht selbst manuell einzeln installieren.
In dem Link habe ich ja gezeigt wie das Setup von Delphi selbst die Installationen fehlender Voraussetzungen automatisch startet.
Martello - Sa 21.03.09 22:05
jaenicke hat folgendes geschrieben : |
In dem Link habe ich ja gezeigt wie das Setup von Delphi selbst die Installationen fehlender Voraussetzungen automatisch startet. |
Statt einer SerienNummer habe ich eine reg736.txt erhalten. Bedeutet dies, daß die Zertifizierung heute wahrscheuinlich ein wenig anders abläuft. als in Deiner "Rezeptur" beschrieben?
jaenicke - Sa 21.03.09 22:32
In dieser Datei steht ja wo du sie hinlegen musst. Die Datei gehört unter:
Quelltext
1: 2: 3:
| c:\Dokumente und Einstellungen\[Benutzername] bzw. C:\Users\[Benutzername] |
Martello - So 22.03.09 21:12
jaenicke hat folgendes geschrieben : |
In dieser Datei steht ja wo du sie hinlegen musst. Die Datei gehört unter: Quelltext 1: 2: 3:
| c:\Dokumente und Einstellungen\[Benutzername] bzw. C:\Users\[Benutzername] | |
Turbo 2006 läuft fein. Danke für die Hilfe.
Als nächstes möchte ich Daten im Diagramm nicht nur statisch darstellen, sondern mit einem Kursor (Mausaktionen) Marken setzen und weiterverarbeiten. In welcher Gegend der vielen Delphi-Objekte muß ich denn suchen und ausprobieren, um das zu lernen?
Mo.
jaenicke - So 22.03.09 21:48
Das wirst du selbst umsetzen müssen (oder du findest eine entsprechende Komponente). Du musst darauf reagieren, wenn der Benutzer mit der Maus auf die PaintBox klickt usw., aber zu dem Thema solltest du dann auch ein neues Thema aufmachen. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!