Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   XE2 Unterschied bei Single Ausgabe zu D7 (https://www.delphipraxis.net/164936-xe2-unterschied-bei-single-ausgabe-zu-d7.html)

Memex 6. Dez 2011 16:27

Delphi-Version: XE2

XE2 Unterschied bei Single Ausgabe zu D7
 
Hallo,

bei nachfolgendem Code bekomme ich Unterschiede zwischen D7 und XE2. Bei dem Single-Typ wird bei der formatierten Ausgabe bei XE2 falsch gerundet. Die Berechnung stimmt aber!

Code:
procedure TForm1.Button1Click(Sender: TObject);
var Code : integer;
    lTF : TextFile;
    lReal48 : Real48;
    lSingle : Single;
    lDouble : Double;

begin
  Edit1.Text := '0.01';
  AssignFile(lTF,'D:\Test.txt');
  try
    Rewrite(lTF);

    Val(Edit1.Text,lReal48,Code);
    Write(lTF,'Real48: '+ Edit1.Text + ' / 100 = ');
    Writeln(lTF,lReal48 / 100 :1:4);
    //D7 : result := 0.0001
    //XE2: result := 0.0001

    Val(Edit1.Text,lSingle,Code);
    Write(lTF,'Single: '+ Edit1.Text + ' / 100 = ');
    Writeln(lTF,lSingle / 100 :1:4);
    //D7 : result := 0.0001
    //XE2: result := 0.0000 <--!!!!

    Val(Edit1.Text,lDouble,Code);
    Write(lTF,'Double: '+ Edit1.Text + ' / 100 = ');
    Writeln(lTF,lDouble / 100 :1:4);
    //D7 : result := 0.0001
    //XE2: result := 0.0001


  finally
    CloseFile(lTF);
  end;
end;
Habt ihr dieses Problem auch schon bemerkt?

Der Code kommt in dem Projekt recht häufig vor... ein Workround ist also schwierig.

Mit freundlichen Grüßen,
Memex

daywalker9 6. Dez 2011 16:33

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Bist aber auch aktuell was das Update angeht? Also Update#2?

Memex 6. Dez 2011 16:46

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
ja :)

daywalker9 6. Dez 2011 16:49

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Dann poste das doch mal im QC mit Demo Projekt.

Stevie 6. Dez 2011 17:12

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Delphi-Quellcode:
Writeln(lTF, FloatToStrF(lSingle / 100, ffGeneral, 1, 4));


Generell würd ich bei einer Migration empfehlen, sich auf Dauer von so Relikten zu trennen. Zumindest die Formatierung wie oben durch die entsprechenden XXXToStr Routinen erledigen zu lassen.

Außerdem läuft es mir bei der Aussage "Der Code kommt in dem Projekt recht häufig vor" kalt den Rücken runter. Typischer Fall von Copy&Paste Programmierung -> refactoring: Code extrahieren und ne extra Prozedur draus machen -> Fix muss nur einmal gemacht werden und man vergisst keine Stelle.

Bjoerk 6. Dez 2011 17:18

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Schreib mal 0:4 in die Datei. BTW, wenn rewrite schief geht, gibts nichts zu closen.

Daniel 6. Dez 2011 17:23

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
XE2? handelt es sich um eine 64-bit Anwendung?

http://docwiki.embarcadero.com/RADSt..._f%C3%BCr_x64)

Stevie 6. Dez 2011 17:33

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Der Fehler ist definitiv mit XE2 reingekommen, in XE ist das Ergebnis wie erwartet.

Edit: Problem ist die _Str2Ext, welche für XE2 von asm auf pure pascal umgeschrieben wurde.

jaenicke 6. Dez 2011 17:54

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Zitat:

Zitat von Daniel (Beitrag 1139830)
XE2? handelt es sich um eine 64-bit Anwendung?

Es betrifft 32-Bit und 64-Bit.

Zum Glück benutze ich weder Single noch Writeln mit etwas anderem als Strings. :mrgreen:

Stevie 6. Dez 2011 18:31

AW: XE2 Unterschied bei Single Ausgabe zu D7
 
Hab's mal reported: http://qc.embarcadero.com/wc/qcmain.aspx?d=101603


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz