![]() |
Real zahl und "mod"
hi,
ich will wissen wie oft verschiedene zahlen in eine real zahl passt. ich habe das mit ... versucht zu lösen aber ich musste feststellen das ich bei zahlen wie zb.:11.12 oder 23.65 den rest 0.01 (9.9999999953E-03) bekomme,er aber nicht " mit gerechnet" wird. es soll mämlich rest null sein...
Delphi-Quellcode:
ich komm leider nicht drauf wie ich das lösen kann.
writeln('geben Sie einen Betrag im folgendem format ein,');
writeln('der gewechselt werden soll (Bsp. 23.65):'); write('Ihr Betrag: '); {eingabe der real zahl} readln(eing); writeln('Sie erhalten von mir ...:'); writeln; begin {feststellen wie oft die 2 in die eingabe passt!} if eing>=2 then begin h:=trunc(eing / 2); eing:=eing-(h * 2); {die zeile führt "MOD" aus} writeln(h,' mal 2',e); end; if eing>=1 then begin h:=trunc(eing / 1); eing:=eing-(h * 1); writeln(h,' mal 1',e); end; if eing>=0.50 then begin h:=trunc(eing / 0.50); eing:=eing-(h * 0.50); writeln(h,' mal 0.50',c); end; if eing>=0.20 then begin h:=trunc(eing / 0.20); eing:=eing-(h * 0.20); writeln(h,' mal 0.20',c); end; if eing>=0.10 then begin h:=trunc(eing / 0.10); eing:=eing-(h * 0.10); writeln(h,' mal 0.10',c); end; { ab hier gibt es Probleme, mit der rundung!!!} if eing>=0.05 then begin h:=trunc(eing / 0.05); eing:=eing-(h * 0.05); writeln(h,' mal 0.05',c); end; if eing>=0.02 then begin h:=trunc(eing / 0.02); eing:=eing-(h * 0.02); writeln(h,' mal 0.02',c); end; if eing>=0.01 then begin h:=trunc(eing / 0.01); eing:=eing-(h * 0.01); writeln(h,' mal 0.01',c); end; writeln((eing),' das ist das letzte was in der var "eing" steht...???'); writeln((eing):6:2); {das ist was als letztes in "eing" drinsteht! aber warum wird es nicht mit gerechnet!??} end Mick [edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit] |
Hallo Mick,
Real Zahlen haben natürlich immer Rundungsfehler, da sie ja in eine binäre Zahl ümgewandelt werden muss. Die Fehler sind in der Regel klein genug, wenn man mit Extended Typen arbeitet. In deinem Fall, in dem ja immer nur 2 Nachkommastellen benutzt werden, würde ich die Zahl nach dem Einlesen direkt in eine Integer Zahl, die den Betrag in Cent enthält umwandeln. Dann gibt es sicher keine Probleme mehr. |
Hallo MrSpock,
Zitat:
Das wäre dann auf 15 oder 16 Stellen genau. Sollte doch langen. Grüsse, Daniel :hi: |
das ist gut zu wissen:
Zitat:
da bin ich leider nicht drauf gekommen, is aber ne gute idee. Zitat:
gruß Mick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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