123,45 + 100,00 = 223.44999999999999

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

123,45 + 100,00 = 223.44999999999999

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag 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.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag von NicTheQuick »

Siehe Wikipedia: https://de.wikipedia.org/wiki/Gleitkomm ... Grundlagen

Das gilt für alle Programmiersprachen, die mit Fließkommazahlen arbeiten.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag 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
Zuletzt geändert von Lord am 22.07.2022 10:46, insgesamt 1-mal geändert.
Bild
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag von marcelx »

Danke - mir ist es bekannt mit den Fließkommazahlen; wie kann ich lösen, dass die Summe stimmt?
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag 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.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: 123,45 + 100,00 = 223.44999999999999

Beitrag von marcelx »

Danke Lord,
damit kann ich leben
Win-10, PB 5.31 (Windows - x86)
Antworten