![]() |
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 |
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: ![]() ein extended hat 64 bit genauigkeit (rest ist exponent) und damit 19.266 dezimalstellen genauigkeit |
Re: Extended mit mehr als 18 Stellen
sonst musst du es eben selber schreiben...
Delphi-Quellcode:
(getestet+funktioniert)
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; für große Zahlen natürlich unbrauchbar, da die Funktion keine Schreibweise "17,793479823789e18" hinkriegt. |
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? |
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:
wenn du z.B. Pi auf 10^20 Stellen genau berechnen willst, kommst du eben nicht drumrum einen neuen Typ zu schreiben oder so.
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; |
Re: Extended mit mehr als 18 Stellen
naja..
Stand eben in der Hilfe. Ich werd mal den Code testen. Danke. Greetz BF |
Re: Extended mit mehr als 18 Stellen
das heisst nicht "1920" sondern "19-20"...
|
Re: Extended mit mehr als 18 Stellen
ja, so klingt es auch sinnvoller... :mrgreen:
|
Re: Extended mit mehr als 18 Stellen
Zitat:
Für (theoretisch) unbegrenzt viele Nachkommastellen gibt's den genialen IInteger von Hagen: ![]() [edit]Zu langsam :stupid: ... [/edit] |
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?
|
Re: Extended mit mehr als 18 Stellen
klassen schreiben und operatoren ueberladen reicht schon.
|
Re: Extended mit mehr als 18 Stellen
Ich habe auch gerade mal in der Delphi-Hilfe nachgeschlagen - ich denke mal, denen ist der Dezimalpunkt abhanden gekommen :roll:
Es sollte sein: 64 Bits geben log10(2^64) = 19,27 signifikante Stellen. |
Re: Extended mit mehr als 18 Stellen
Äh, ja. Beispiel?
Also einfache Records und Typen, Klassen etc. habe ich ja schon geschrieben, aber einen Zahlentyp, mit dem man rechnen kann? |
Re: Extended mit mehr als 18 Stellen
Zitat:
|
Re: Extended mit mehr als 18 Stellen
oder auch etwas anders geschrieben: 64 * ln(2) / ln(10)
|
Re: Extended mit mehr als 18 Stellen
langsamheit macht nix, so was hab ich schon immer gesucht !!! :bounce1: :-D :-D :-D :-D
zum Thema wie schreibt man eine Typ? Seeeeeeeehr kompliziert. In Type einen Typ deklarieren:
Delphi-Quellcode:
type
tzahl=class protected {Versteckte Variablen / Funktionen / Prozeduren / Propertys} x:integer; function getwertvonx:integer; procedure setx(setxto:integer); public {In anderen Units sichtbare Variablen/Fs/Ps/props} property wertvonx read getwertvonx write setx; end; [...] procedure tzahl.setx(setxto:integer); begin x:=setxto; //Aktion wenn X geschrieben wird (labels verändern etc) end; function tzahl.getwertvonx:integer; begin result:=x; //Aktion wenn x ausgelesen wird end; |
Re: Extended mit mehr als 18 Stellen
OK, ich gebs auf. Bin halt noch ein Newbie.
|
Re: Extended mit mehr als 18 Stellen
Gib niemals auf!!!
Aufgeben hat keinen Sinn. Besser ein Tutorial durchlesen und du weisst absofort, wie man Typen schreibt. manchmal sogar mehr von nutzen als aufzugeben. |
Re: Extended mit mehr als 18 Stellen
Naja, eigentlich muss es ja nicht sein. Ich brauche es momentan nicht und versuche mich besser wieder an OpenGL und meinen zig unbeendeten Projekten.
Welches tutorial eigentlich? |
Re: Extended mit mehr als 18 Stellen
Eines von 10000000000000 Tutorials die du überall in Google verstreut und vielleicht auch sogar in der DP findest. Ich hab selber mal so eins geschrieben, aber das find ich gerade nicht :oops: Erst gestern oder vorgestern hat Luckie hier eins gepostet...
|
Re: Extended mit mehr als 18 Stellen
Um was geht es überhaupt :stupid: ? Um OOP, oder wie man eine zweite DECMath-Unit schreibt :stupid: ² ?
|
Re: Extended mit mehr als 18 Stellen
Achso. Danke. Ich dachte, du meinst ein bestimmtes.
Och nee, jetzt ham wir den ganzen schönen Thread vollgespamt. :wall: |
Re: Extended mit mehr als 18 Stellen
@khabarakh: äh... irgendwie beides, vielleicht auch garnix davon... :)
@3/8: macht nigs, wozu sind die Threads denn sonst da? :) |
Re: Extended mit mehr als 18 Stellen
Die Mods sagen immer "höchstens eine Frage pro Thread". Mit ein Grund für die Revolution.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 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