Autor |
Beitrag |
Martello
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Sa 21.03.09 00:09
Warum zum Deiphi ist '-13.916' kein gültiger Gleitkommawert?
Mo.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 21.03.09 00:10
Vielleicht ist DecimalSeparator = ',' ? 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Sa 21.03.09 00:16
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 21.03.09 00:19
Delphi-Quelltext 1: 2: 3: 4:
| var x : Extended; begin x := -13.916; | klappt bei mir
edit: erst bei der Nutzung von StrToFloat wird's abhängig vom Systemstandard: x := StrToFloat('-13,916'); klappt, mit . nicht.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Manina
      
Beiträge: 44
Win 7 Pro
RAD Studio 2010 Pro
|
Verfasst: Sa 21.03.09 00:22
_________________ Gates, oder Gates nicht ?
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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
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
... 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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
Mo.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 21.03.09 09:28
Oder verwende (wenn durch deine Delphiversion unterstützt) die überladenen Version der Konvertierungsfunktion mit angabe der Formateinstellungen
_________________ Markus Kinzler.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Sa 21.03.09 12:02
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Sa 21.03.09 12:04
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 21.03.09 16:09
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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?
Nimm doch das kostenlose und sehr gute Turbo Delphi (das ist Delphi 2006 Professional ohne Unterstützung für zusätzliche Packages):
www.delphi-library.d...ewtopic.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 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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).
|
|
|