AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Real zahl und "mod"

Ein Thema von Mick · begonnen am 6. Apr 2003 · letzter Beitrag vom 6. Apr 2003
Antwort Antwort
Mick

Registriert seit: 31. Dez 2002
47 Beiträge
 
Delphi 6 Personal
 
#1

Real zahl und "mod"

  Alt 6. Apr 2003, 17:23
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]
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 6. Apr 2003, 20: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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 6. Apr 2003, 20:58
Hallo MrSpock,
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
  Mit Zitat antworten Zitat
Mick

Registriert seit: 31. Dez 2002
47 Beiträge
 
Delphi 6 Personal
 
#4
  Alt 6. Apr 2003, 21: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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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