Domino 9 und frühere Versionen > ND7: Entwicklung

Funktionsweise von Int (Integer) ?

(1/2) > >>

Bille:
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

--- Ende Code ---

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 ...

koehlerbv:
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

Bille:
Ok, dann werde ich meinen Variablentypen ändern. Wer kann denn wissen, dass das so einfach ist  ;D

Bernhard, danke für Deine Hilfe!

Bille

koehlerbv:
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

Bille:
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!

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln