Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nochmal Unterschied Pascal-Delphi (https://www.delphipraxis.net/133706-nochmal-unterschied-pascal-delphi.html)

ernschd 7. Mai 2009 09:41


Nochmal Unterschied Pascal-Delphi
 
Hi,

in meinem alten Pascal Programm passiert folgendes:
Delphi-Quellcode:
var
koZahl : double;
begin
koZahl:= 1,0534835863;
Str (koZahl:50:50,RetS);
{ RetS enthält nun den String (50 Zeichen lang):
'                             1.053483586307265800'
}
Delphi macht mal wieder was anderes:

Delphi-Quellcode:
var
koZahl: double;
begin
koZahl:= 1,0534835863;
Str (koZahl:50:50,RetS);
{ RetS enthält nun den String (50 Nachkommastellen):
'1,05348358630726576000000000000000000000000000000000'
}
Wie kommt das zustande? Und wie bekomme ich das gleiche Ergebnis in Delphi, bzw. ist das Ergebnis von Pascal überhaupt richtig?

Danke und Gruß,
Ernschd

mkinzler 7. Mai 2009 09:45

Re: Nochmal Unterschied Pascal-Delphi
 
In Delphi werden die Ländereinstellungen bzgl der Dezimal- und Tausendertrenner berücksichtigt.

Man kann diese auch im Code setzen:

Delphi-Quellcode:
DecimalDepataror := ...
ThousandSeparator := ...
In (Turbo-)Pascal könnte man den Punkt im String anschliessend mit , ersetzen.

hoika 7. Mai 2009 09:46

Re: Nochmal Unterschied Pascal-Delphi
 
Hallo,

vielleicht war beim alten Pascal-Programm
diese Software-Fliesskomma-Emulation eingeschaltet.
Delphi benutzt immer die Fliesskomma-Einheit des Prozessor ("Coprozessor").


Heiko

ernschd 7. Mai 2009 09:52

Re: Nochmal Unterschied Pascal-Delphi
 
Aso,

der Punkt wird auf jeden Fall später durch ein Komma ersetzt, das ist nicht das Problem.

Der Compilermodus in Pascal ist auf {$N+} gesetzt, also keine Software-Fliesskomma-Emulation.

hoika 7. Mai 2009 10:21

Re: Nochmal Unterschied Pascal-Delphi
 
Hallo,

um noch mal auf die Grundfrage zu kommen.
Ich denke, das Pascal-Str war falsch.

Str (koZahl:50:50,RetS);


Die erste 50 steht für die String-Länge,
die zweite 50 für die Anzahl der Dezimalstellen.

Davon abgesehen, zweimal 50 eh Quatsch sind
(es können maximal 48 sein, wegen der Vorkommazahl und dem Kommazeichen)
war in der alten Pascal-Implementierung wohl sowas drin wie

wenn gewünschte Dezimal-Stellen nicht gehen, fülle links mit Leerzeichen auf.

in Delphi heisst es dann wohl
wenn gewünschte Dezimal-Stellen nicht gehen, ergänze 0, bis Width erreicht ist.


Ein besserer Link als die Hilfe dazu.
Delphi Str


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.

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