Autor Thema: Funktionsweise von Int (Integer) ?  (Gelesen 2803 mal)

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Funktionsweise von Int (Integer) ?
« am: 16.05.09 - 14:32:36 »
Hallo,
in einer Funktion lasse ich eine Zahl auf 0,05 abrunden. Da es ein "richtiges" Abrunden nicht gibt, verwende ich diese zwei Zeilen.

Code
				
Zins = Int(Zins * 100)
Feld = (Zins - (Zins Mod 5)) / 100

Beträgt allerdings der Wert für Zins 1,15, so kommt nach der ersten Zeile das Ergebnis 114 raus. Entsprechend wird nach der zweiten Zeile auch auf 1,10 abgerundet.
Nur warum kommt mit der Verwendung INT 114 raus? Es müsste doch 115 sein, oder?

Wie funktioniert "Int"? Aus der Hilfe werde ich auch nicht schlauer.

Bille

PS: Ich habe das Problem mit einer kleinen IF-Anweisung in den Griff bekommen, trotzdem würde mich interessieren, wo mein Fehler liegt ...
« Letzte Änderung: 17.05.09 - 09:26:48 von Bille »
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Funktionsweise von Int (Integer) ?
« Antwort #1 am: 17.05.09 - 12:38:48 »
Einen Fehler im eigentlichen Sinne hast Du da nicht gemacht, Bille - Du bist auf die Speicherform reeller Zahlen gestolpert. Da ein Zahlenbereich von fast 2 * 10308 in nur 8 Bytes umgerechnet werden müssen, ist das Ergebnis "unscharf".

Mit 1,15 * 100 bist Du auf genau eine dieser besonders üblen "Unschärfen" gestolpert.

By the way: Ist Deine Variable "Zins" nicht vom Typ Double, sondern Single, dann bekommst Du tatsächlich 115 heraus. Wenn Du den Double-Wert mit 1000 multiplizierst, ist das Ergebnis auch wie erwartet 1150.

Bernhard

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Re: Funktionsweise von Int (Integer) ?
« Antwort #2 am: 17.05.09 - 12:43:47 »
Ok, dann werde ich meinen Variablentypen ändern. Wer kann denn wissen, dass das so einfach ist  ;D

Bernhard, danke für Deine Hilfe!

Bille
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Funktionsweise von Int (Integer) ?
« Antwort #3 am: 17.05.09 - 12:53:07 »
Bille, mit Single verringerst Du lediglich die "Unschärfe", Du beseitigst sie aber nicht.

Der sicherere Weg wäre, Du arbeitest so lange mit Ganzzahlen, bist Du das eigentliche Ergebnis benötigst - insofern das möglich ist.

Bernhard

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Re: Funktionsweise von Int (Integer) ?
« Antwort #4 am: 17.05.09 - 13:04:45 »
Mmh, das lässt sich hier leider nicht anders machen.
Vielleicht lasse ich dann einfach meine Krücke mit der If-Anweisung stehen ...

Danke und noch einen schönen Sonntag!
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Funktionsweise von Int (Integer) ?
« Antwort #5 am: 17.05.09 - 13:22:26 »
Oder Du gibst an kritischen Stellen, an denen Du bei einer Operation den Datentyp änderst, Deine eigene "unkritische Unschärfe" in der richtigen Richtung dazu:

Zins = Int ((Zins + 0.0001) * 100)

Die "Unschärfe" muss natürlich um mindestens eine Dimension kleiner sein als die, mit der Du rechnen willst (hier wären bei Zins drei Nachkommastellen zu berücksichtigen, 0.0001 ist um eine Dimension kleiner).

Auch Dir ein schönes Wochenende,
Bernhard

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Funktionsweise von Int (Integer) ?
« Antwort #6 am: 17.05.09 - 13:29:33 »
Ich denke der richtige Weg wäre die Verwendung von Currency als Datentyp.
Der ist speziell für das Rechnen mit Währungen. Geldbeträge
als Fliesskommazahl, dafür wirst du von jedem Buchhalter gelyncht :-)
ATOS.org - Feel the music!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Funktionsweise von Int (Integer) ?
« Antwort #7 am: 17.05.09 - 13:47:16 »
Wenn es um das Geld selbst geht, stimmt das. Hier steht die Frage: Wie viele Kommastellen darf der Zinswert annehmen? Bankintern wird da ja häufig ganz anders gerechnet als das, was der normale Bankkunde kennt.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz