Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Real zahl und "mod" (https://www.delphipraxis.net/3929-real-zahl-und-mod.html)

Mick 6. Apr 2003 16:23


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:
     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
ich komm leider nicht drauf wie ich das lösen kann.


Mick

[edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit]

MrSpock 6. Apr 2003 19:17

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.

Daniel B 6. Apr 2003 19:58

Hallo MrSpock,
Zitat:

Zitat von MrSpock
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.

Sollte aber mit Double besser sein, oder meinst Du nicht?
Das wäre dann auf 15 oder 16 Stellen genau. Sollte doch langen.

Grüsse, Daniel :hi:

Mick 6. Apr 2003 20:22

das ist gut zu wissen:
Zitat:

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.

da bin ich leider nicht drauf gekommen, is aber ne gute idee.
Zitat:

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
danke
gruß

Mick


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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