Autor Beitrag
Martello
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 00:09 
Warum zum Deiphi ist '-13.916' kein gültiger Gleitkommawert?

Mo.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 21.03.09 00:10 
Vielleicht ist DecimalSeparator = ',' ? :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 00:16 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht ist DecimalSeparator = ',' ? :nixweiss:


Hatte ich auch schon probiert. Aber der Standard ist Dezimalpunkt, und daran liegt es definitiv nicht :cry:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 21.03.09 00:19 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win 7 Pro
RAD Studio 2010 Pro
BeitragVerfasst: Sa 21.03.09 00:22 
Du hast doch nicht etwa die Hochkommas mit im Quelltext ? :oops:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var f : Double;
begin
  f := '-13.916'// falsch
  f := -13.916// richtig
end;

_________________
Gates, oder Gates nicht ?
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 00:28 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 00:35 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconJayEff 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 21.03.09 00:36 
Ich denke mal, dass du schauen solltest wie du den Systemstandard erfragst und da wurde schon der Suche in der Entwickler-Ecke DECIMAL SEPARATOR genannt, der wahrscheinlichsterweise (interessante neue Wortkonstruktion) für dein Problem verantwortlich ist.

mfg
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 00:50 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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"

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 01:36 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 12:02 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 12:04 
user profile iconmkinzler hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 12:12 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
repeat          {alle Punkte}

readln(pkt,zeile);
val(zeile,zeiger,code);   {Zeiger zeigt auf Startpunkt jedes Zyklus'}

reset(inn);
for i:= 1 to zeiger-4 do readln(inn,zeile); {neuer Startpunkt mit Vorlauf}
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,#9end;
    writeln(out);       {fr nexten Zyklus...}



until eof(pkt); {alle Punkte}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 16:09 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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?

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 21:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 21:15 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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):
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.

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Sa 21.03.09 21:31 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 21:39 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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).