Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Extended mit mehr als 18 Stellen (https://www.delphipraxis.net/56126-extended-mit-mehr-als-18-stellen.html)

blackfoxx 1. Nov 2005 10:59


Extended mit mehr als 18 Stellen
 
Hi Leutz,
Ich möchte einen Extended Wert mit FloatTostrF in eine reine Zahl Formatieren. Das funktioniert aber nur bis 18 Stellen. Was mache ich denn, wenn ich aber mehr als 18 als reine Zahl anzeigen möchte? :?:
Danke schonmal..

Greetz BlackFoXX

ripper8472 1. Nov 2005 11:03

Re: Extended mit mehr als 18 Stellen
 
mehr als 18 stellen wird ein extended eh nicht haben.

edit: ok, ich hab gegoogelt und extended soll etwa 19 stellen hinkriegen. mehr aber auch nicht.

edit:
http://www.guidogybels.net/index.html?floats.html
ein extended hat 64 bit genauigkeit (rest ist exponent) und damit 19.266 dezimalstellen genauigkeit

ichbins 1. Nov 2005 11:08

Re: Extended mit mehr als 18 Stellen
 
sonst musst du es eben selber schreiben...

Delphi-Quellcode:
function floattostr(x:extended;kommastellen:integer):string;
var
  b:extended;
  i:integer;
begin
  b:=x;
  if b<0 then begin
    b:=-b;
    result:='-';
  end else
    result:='';
  result:=result+inttostr(trunc(b))+',';
  b:=b-trunc(b);
  for i:=1 to kommastellen do begin
    b:=b*10;
    result:=result+inttostr(trunc(b));
    b:=b-trunc(b);
  end;
end;
(getestet+funktioniert)

für große Zahlen natürlich unbrauchbar, da die Funktion keine Schreibweise "17,793479823789e18" hinkriegt.

blackfoxx 1. Nov 2005 11:12

Re: Extended mit mehr als 18 Stellen
 
Laut Delphi Hilfe ist der maximale Wert von Extended 1.1*10^4932 bei 8 Byte Größe und 1920 signifikanten Stellen.
Es sind also weitaus mehr als 18 Stellen oder? :gruebel:
Nur wie bekomme ich die in meinen String?

ichbins 1. Nov 2005 11:14

Re: Extended mit mehr als 18 Stellen
 
ich hab dir gerade oben eine Funktion hingeschrieben. Die geht auch. Aber ein Extended-Wert hat 10 Byte, da passen niemals 1920 Signifikante Stellen rein.

Delphi-Quellcode:
function floattostr(x:extended;kommastellen:integer):string;
var
  b:extended;
  i:integer;
begin
  b:=x;
  if b<0 then begin
    b:=-b;
    result:='-';
  end else
    result:='';
  result:=result+inttostr(trunc(b))+',';
  b:=b-trunc(b);
  for i:=1 to kommastellen do begin
    b:=b*10;
    result:=result+inttostr(trunc(b));
    b:=b-trunc(b);
  end;
end;
wenn du z.B. Pi auf 10^20 Stellen genau berechnen willst, kommst du eben nicht drumrum einen neuen Typ zu schreiben oder so.

blackfoxx 1. Nov 2005 11:23

Re: Extended mit mehr als 18 Stellen
 
naja..
Stand eben in der Hilfe. Ich werd mal den Code testen. Danke.

Greetz BF

ripper8472 1. Nov 2005 11:25

Re: Extended mit mehr als 18 Stellen
 
das heisst nicht "1920" sondern "19-20"...

ichbins 1. Nov 2005 11:26

Re: Extended mit mehr als 18 Stellen
 
ja, so klingt es auch sinnvoller... :mrgreen:

Khabarakh 1. Nov 2005 11:27

Re: Extended mit mehr als 18 Stellen
 
Zitat:

Zitat von blackfoxx
Laut Delphi Hilfe ist der maximale Wert von Extended 1.1*10^4932 bei 8 Byte Größe und 1920 signifikanten Stellen.
Es sind also weitaus mehr als 18 Stellen oder? :gruebel:
Nur wie bekomme ich die in meinen String?

Das ist ein Schreibfehler in der D2005-OH. Es sollte "19 - 20" heißen :wink: .

Für (theoretisch) unbegrenzt viele Nachkommastellen gibt's den genialen IInteger von Hagen: http://www.delphipraxis.net/internal...=106306#106306

[edit]Zu langsam :stupid: ... [/edit]

3_of_8 1. Nov 2005 11:28

Re: Extended mit mehr als 18 Stellen
 
Kurze Zwischenfrage eines Dummen: Wie schreibt man einen neuen Typ? Also wie man Typen deklariert ist mir klar, aber wie kann ich einen neuen Zahlentyp deklarieren? Muss ich da mit Assembler arbeiten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.
Seite 1 von 3  1 23      

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