2012-04-13 6 views
-2

Mögliche Duplizieren Verwendung für:
C# Maths gives wrong results!Ungenaue Wert, während mit Doppel

ich den Code bin mit

for (double i = 0; i <= 3; i += 0.1) 
{ 
    Console.WriteLine(i); 
} 

Die Ergebnisliste

  • 0,1
  • 0,2
  • 0,30000004
  • 0,4
  • 0,5
  • 0,6
  • 0,7
  • 0,7999993
  • 0,9
  • . . .

Woher kommen diese ungenauen Werte?

+7

Genaues Duplikat von Hunderten von Fragen. Das erste, was zu verstehen ist: Der Wert von 0,1 ist nicht genau * 0,1 ... –

+0

[Was jeder Informatiker über Fließkomma-Arithmetik wissen sollte] (http://docs.oracle.com/cd/E19957-01/806 -3568/ncg_goldberg.html) – Oded

+0

Sie erhalten eine Antwort in diesem Jon Skeet Artikel, aber einfach gesagt, ein Doppel ist von Natur aus ungenau. http://csharpindepth.com/Articles/General/FloatingPoint.aspx –

Antwort

1

Doubles sind keine exakten Werte. Sie werden immer Genauigkeitsprobleme haben, wenn Sie mit Doppeln arbeiten, und sollten Druckformatierungen verwenden, um sie auf die von Ihnen gewünschte Genauigkeit zu runden.

Es ist auch keine sehr gute Praxis, Doppel als Schleifenzähler zu verwenden. Verwenden Sie stattdessen einen ganzzahligen Wert und führen Sie die Berechnung innerhalb der Schleife aus, um den gewünschten Wert zu erhalten.