vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Double multilizieren 
Autor: Christian Peters
Datum: 26.10.06 08:43

Hallo,

ich hätte nicht gedacht das ich wegen sowas einfachem ein Problem haben könnte. Aber bitte: Ich kann keine 2 Doubles anständig multiplizieren!!!

Der Code sieht wie folgt aus:
Value.Installation = 29.9
Value.Quantity = 3.0
Value.Installation *= Value.Quantity
Value ist ein eigenes Objekt das nur die beiden Werte asl Double kennt.
Heraus kommt am Schluss 89.699999999999989.

!!! HILFE !!!

Wer Fehler findet darf sie behalten.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Moderatorralf_oop (Moderator)
Datum: 26.10.06 08:54

Dieser "Fehler" liegt in der internen Datenspeicherung von Double zusammen (Single hat dieses Problem auch). Double und Single sind Fließkommawerte, welche halt diese Besonderheit besitzen. Diese Besonderheit tritt eigentlich in jeder Programmiersprache auf.

Beim Typ Decimal hast du das Problem nicht, das ist nämlich ein Festkommatyp.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Christian Peters
Datum: 26.10.06 08:57

Servus,

wie löse ich denn jetzt das "Problem"?
Alles mit Decimal? Gibts da nicht auch Dinge die ich beachten muss?
Oder gibt es eine saubere Variante?

Danke,

Chris

Wer Fehler findet darf sie behalten.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Moderatorralf_oop (Moderator)
Datum: 26.10.06 09:01

Entweder mit Decimal, wenn du die hohe Genauigkeit brauchst (z.B. im Finanzwesen), ansonsten halt mit dem "Problem" leben, so z.B. bei Vergleiche nicht mit festen Wert vergleichen, sondern eher prüfen, ob es <= oder >= ist.

Ansonsten eine Bruch-Struktur schreiben. Für Zähler und Nenner Integer oder Long verwenden - mit diesem Vorgehen hättest du sehr genaue Ergebnisse, da du Rundungsfehler vermeidest. Am Ende der Berechnung kannst du das ja nach Single/Double/Decimal umwandeln.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: ModeratorDaveS (Moderator)
Datum: 26.10.06 09:03

Decimal ist eher z.B. für Geldsummen, weil die Leute sich sonst wegen fehlendes 0,00000000000001€ im Konto so furchtbar aufregen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Moderatorralf_oop (Moderator)
Datum: 26.10.06 09:05

Naja, irgendwo hört der Spaß auf

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Christian Peters
Datum: 26.10.06 09:35

Hallo,

danke für die Infos.
Eine Frage hätte ich da aber noch.

Für VB6 gab es wenn ich mich recht entsinne doch ein paar Workshops für und um das Thema Decimal.
Muss ich diese Dinge auch mit .NET (2.0) beachten bzw. gibt es auch hier Stolperfallen?

Chris

Wer Fehler findet darf sie behalten.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Double multilizieren 
Autor: Moderatorralf_oop (Moderator)
Datum: 26.10.06 09:37

Nein, seit .NET 1.0 kennt VB den Typ Decimal, welcher 128Bit groß ist.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel