| Autor |
Beitrag |
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Mi 13.06.07 18:43
ich hab ne konstant so deklariert:
const myVersion:Single=1.10000000000;
aber wenn ich jz z.b.: 1.1-myVersion rechne, kommt nicht 0 raus sondern sowas wie 0,000000000884149
wie kann ich das beheben?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 13.06.07 18:49
Mit Float-Typen gar nicht.
_________________ We are, we were and will not be.
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Mi 13.06.07 18:55
na toll...
dann muss ich mich wo damit abgeben dass 1.1-1.1 nicht 0 ist?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 13.06.07 19:01
Du kannst Version und Suberversion getrennt in Integern speichern und diese überprüfen. Dass 1.1-1.1 ungleich 0 ist liegt an der Ungenauigkeit bei der Darstellung von Fließkommazahlen im Rechner. Du kannst auf < 0.00000001 abfragen, aber bei einer Versionsabfrage wäre das irgendwie komisch.
_________________ We are, we were and will not be.
|
|
ub60
      
Beiträge: 765
Erhaltene Danke: 130
|
Verfasst: Mi 13.06.07 19:07
Bei Single speichert Delphi die Zahl in 4 Byte ab, da geht es nicht genauer.
Mit Double werden 8 Byte verwendet, da ist die Abweichung nur noch 8,87961579265628E-17.
Rechnet man mit Extended, die in Delphi 10 Byte benötigen, wird eine Differenz von 0 angezeigt. Wenn Du also 1.1 eingibst, scheint Delphi intern mit Extended zu rechnen.
ub60
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Do 14.06.07 06:30
Dazu einen Artikel von Luckie:
www.michael-puff.de/...13_Fliesskomma.shtml
Aber wieso brauchst du so genaue Zahlen für eine Versionsüberprüfung?
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Do 14.06.07 07:19
Flamefire hat folgendes geschrieben: | ich hab ne konstant so deklariert:
const myVersion:Single=1.10000000000;
aber wenn ich jz z.b.: 1.1-myVersion rechne, kommt nicht 0 raus sondern sowas wie 0,000000000884149
wie kann ich das beheben? |
mit folgendem Delphi-Quelltext 1:
| if Abs(1.1-myVersion)<1e-06 then |
kannst Du das Problem beheben, wobei 1e-06 erstmal reichen sollte, wenn mehr Stellen hinzukommen, einfach anpassen!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 15.06.07 10:08
ok danke...
ich rechne mit der versionsnummer...darum...
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Fr 15.06.07 10:42
Du kannst auch einen ganzzahligen Wert für deine Versionsnummer nehmen und damit rechnen. Wenn man die Version als Hex-Wert kodiert geht das ganz prächtig:
Beispiel:
Delphi-Quelltext 1: 2: 3:
| const VersionShort = $0102; VersionLong = $01020304; |
Beste Grüße
Tastaro
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 15.06.07 10:44
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 15.06.07 11:41
Was spricht gegen einen String als Versionsnummer? Ach, er will ja 'rechnen' 
_________________ Na denn, dann. Bis dann, denn.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 15.06.07 14:43
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 15.06.07 17:52
es sei denn die versionsnummer wird für eine verschlüsselung benutzt ^^
|
|
Dunkel
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: Fr 15.06.07 18:12
Flamefire hat folgendes geschrieben: | | es sei denn die versionsnummer wird für eine verschlüsselung benutzt ^^ |
StrToFloat oder StrToFloatDef?
_________________ Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 15.06.07 19:57
gleiches problem s. oben...
|
|