Seite 1 von 1

123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 09:16
von marcelx
Hi,

habe folgendes Problem mit einem Addition ergibt 223.44999999999999:

Code: Alles auswählen

a.s = Chr(34)+"123,45"+Chr(34)
b.s = Chr(34)+"100,00"+Chr(34)

a = ReplaceString(ReplaceString(a, Chr(34), ""), ",", ".")
b = ReplaceString(ReplaceString(b, Chr(34), ""), ",", ".")

vala.d = ValD(a)
valb.d = ValD(b)

Debug vala
Debug valb
Debug vala + valb  ; 223.44999999999999
Debug StrF((vala + valb), 2) ; 223,45 OK

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 10:24
von Lord
Hi!
vala + valb ; 223.44999999999999
-> Binärdarstellung kann 223,45 nicht exakt abbilden
StrF((vala + valb), 2)
-> Hilfedatei: The number will be rounded, if 'NbDecimal' is smaller than existing decimal places of 'Value.f'.
StrF((vala + valb))
-> zeigt z.B. "223.4499969482" an.

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 10:39
von NicTheQuick
Siehe Wikipedia: https://de.wikipedia.org/wiki/Gleitkomm ... Grundlagen

Das gilt für alle Programmiersprachen, die mit Fließkommazahlen arbeiten.

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 10:41
von Lord
Kann man z.B. mit Integerrechnung lösen:

Code: Alles auswählen

exp=2; Nachkommastellem
d=Pow(10, exp); Devisor
Debug d

a.s = Chr(34)+"123,45"+Chr(34)
b.s = Chr(34)+"100,00"+Chr(34)

a = ReplaceString(ReplaceString(a, Chr(34), ""), ",", ".")
b = ReplaceString(ReplaceString(b, Chr(34), ""), ",", ".")

Debug a
Debug b

a1.f=ValF(a)*d
b1.f=ValF(b)*d

ab.s=StrF((a1+b1))

Debug ab
Debug Str(Val(ab)/d)+","+Right(ab,exp)

Edit: aus "Intergerrechnung" "Integerrechnung" gemacht

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 10:43
von marcelx
Danke - mir ist es bekannt mit den Fließkommazahlen; wie kann ich lösen, dass die Summe stimmt?

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 21.07.2022 10:52
von NicTheQuick
marcelx hat geschrieben: 21.07.2022 10:43Danke - mir ist es bekannt mit den Fließkommazahlen; wie kann ich lösen, dass die Summe stimmt?
Wenn dir das schon bekannt ist, dann siehst du ja, dass die Summe stimmt. Du musst sie eben richtig runden lassen beim Anzeigen.

Re: 123,45 + 100,00 = 223.44999999999999

Verfasst: 22.07.2022 09:35
von marcelx
Danke Lord,
damit kann ich leben