![]() |
Zahl als Bruch speichern
Hi DP
ich hätte da mal ne Frage und hoffe ihr könnt mir dabei helfen es geht nämlich um folgendes: ich hab ne real variable und wenn ich z.B. 2 durch 3 teile dann muss der ja irgendwann runden... nun hab ich ein Programm in dem es erforderlich ist, dass er eben nciht rundet... unendlich viele nachkommastellen kann ich gleich vergessen, schon klar! was cih bräuchte wäre dann wohl statt real etwas, was statt zu runden bruchwerte annimmt... kennt ihr da sowas? (oder ahbt ihr ne Idee wie ichs lösen könnte?) danke im vorraus! lg Dino |
Re: genauen wert
Bei "2 geteilt durch 3" wirst du vermutlich kein Rundungsproblem bekommen.
Bei "1245 durch 524" schon eher. Versuch doch mal den grössten Float-Datentyp für die Rechnung zu verwenden. Anschliessend castest Du auf einen kleineren Float-Datentyp. Dann könnte sein, dass nur "abgeschnitten" wird. |
Re: genauen wert
2 durch 3 war vorher 0.66[..]667 so wie du es sagst wäre es ja dann 0.66[..]66 ...
das stimmt aber ja dann ebenfalls nciht... also nur abgeschnitten ist mir für den zweck schon zu viel, sorry der müsste schon dann halt den wert 2/3 annehmen |
Re: genauen wert
Dann musst du dir die Zahlen eben als Bruch merken (oder als Wurzel, wenn du alle reelen Zahlen haben willst).
|
Re: genauen wert
Schreibe dir doch eine Klasse die mich Brüchen arbeiten kann oder suche dir eine schon fertige aus (ich weiß gerade nicht ob es in der DP schon fertige Klassen dafür gibt).
Flare |
Re: genauen wert
es sind wirklich nur brüche und keine wurzeln...
wie das mt der klasse geht weiss ich ncoh net so ganz :( klassen wären z.B. real, extended, single, integer u.s.w., oder? also was in meinem programm (extrem vereinfacht) passiert ist folgendes:
Delphi-Quellcode:
var
xr,yr,fr:real; i,fori:Integer; for fori := 0 to 1000 do begin fr:=-xr/i; xr:=xr+(i*fr); yr:=yr+(i*fr); // und hier zwischen passiert halt auch ncoh einges, was aber mit dem Problem wenig zu zun hat end; |
Re: genauen wert
also ich denke ich brauche für diesen zweck einfach ne eigene klasse
wo finde ich informationen dazu wie ich mir eine mache oder ob es schon eine richtige für mcih gibt? ![]() |
Re: genauen wert
Du brauchst eigentlich nur soetwas:
Delphi-Quellcode:
Die Prozeduren zu den Grundrechenarten musst du natürlich noch implementieren. Das dürfte aber wohl nicht allzu kompliziert sein und sich mit Mathe aus der sechsten Klasse lösen lassen. :zwinker:
type
TBruch = class(TObject); public zaehler, nenner: integer; // Oder Int64 bei sehr großen Zahlen procedure add(bruch: TBruch); procedure sub(bruch: TBruch); procedure mul(bruch: TBruch); procedure divide(bruch: TBruch); // div geht nicht, weil das ja ein geschützter begriff ist... end; |
Re: genauen wert
Man sollte natürlich noch eine Methode "kürzen" implementieren, dass man nicht so schnell an die Grenzen von integer kommt :zwinker:
|
Re: genauen wert
@sirius slbstverständlich
nun sagt er aber "= erwartet aber zaehler gefudnen :(" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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