2016-04-27 4 views
1

Ich verwende Convert.ToDouble(value), um einen OleDbDataReader-Typ in Double zu konvertieren, aber manchmal werden zusätzliche Dezimalstellen hinzugefügt (ich arbeite mit Access).Konvertieren in doppelt fragwürdige Genauigkeit

Beispiel:

Lets sagen data(0) den Wert hält 69,8 (mit Komma)

Dann ist dieser mein Code:

Dim data As OleDbDataReader = DBBroker.getInstance.read("SELECT ......") 

Dim m as Double = Convert.ToDouble(data(0)) 

Mein Problem ist, dass diese m etwas macht wie 69,80002302 (oder etwas Ähnliches) statt nur 69,8 wie es wirklich enthält.

Warum? Wie kann ich es lösen?

+0

Ihr angegebenes Beispiel ist [nicht reproduzierbar] (https://dotnetfiddle.net/5S2g55). Wie @JohnColeman schrieb, geben Sie bitte ein echtes Beispiel Ihres Codes, wenn Sie tatsächlich auf dieses Problem stoßen. –

+0

Ich habe es bearbeitet. – Wrong

+1

Sind Sie sicher, dass der Wert in der Datenbank genau 69,8 ist? Einige Datenbank-Tools können das Feld so formatiert anzeigen, dass es nur aussieht * wie es 69,8 enthält, aber 69,80002302 wirklich hält. –

Antwort

1

Nun, sind Sie wirklich sicher, dass das Feld wirklich genau 69,8 enthält oder einfach Access den Wert abrundet?

Wenn Sie wirklich sicher sein wollen, was sich im Leser befindet, können Sie in den Code debuggen und .IsDbNull(0) verwenden, um zu überprüfen, ob der Wert null ist. Wenn dies nicht der Fall ist, sehen Sie sich den tatsächlichen Typ von data(0) in der Registerkarte Locals in Visual Studio an. Wenn es bereits ein Double ist, findet keine Konvertierung statt und ich vermute, dass das Feld bereits einen gerundeten Wert speichert.

+0

Ja, ich debuggte und in der letzten Zeile, während Daten (0) 69,8 war, machte es den Wert, sagte ich. Es ist nicht wirklich 69,8 (ich erinnere mich nicht, welche Nummer es war, es ist ein Beispiel dafür, was passiert ist) – Wrong

+0

Wenn es nicht GENAU 69,8 war, könnte es ein einfaches Rundungsproblem sein. Bitte geben Sie den genauen Wert an. –

Verwandte Themen