Ich versuche, eine Zahl zu 7 Dezimalstellen abzurunden, aber ich bemerkte, dass Math.Round nicht richtig mit einigen Zahlen funktioniert:C# Math.Round Bug?
Math.Round(39.248779999999996,3) => 39.249
Math.Round(39.248779999999996,4) => 39.2488
Math.Round(39.248779999999996,5) => 39.248779999999996
Math.Round(39.248779999999996,6) => 39.248779999999996
Math.Round(39.248779999999996,7) => 39.248779999999996
Kann mir jemand erklären dieses Verhalten?
Diese sind Gleitkommawerte . Sie haben keine endliche Binärdarstellung mit einer beliebigen Anzahl von Ziffern. Konvertieren Sie es in einen 'Dezimaltyp ', wenn Sie eine genaue Darstellung wünschen. –
Das Problem ist, dass ich ein Double an eine externe Komponente übergeben muss, für die ich die Methodensignatur nicht ändern kann, und dass diese Komponente einen Fehler auslöst, wenn die Zahl mehr als 7 Dezimalstellen hat. Gibt es eine Möglichkeit, diese doppelte Zahl effektiv auf 7 Dezimalstellen zu runden? – smeegoan
Ähm, es gibt keine Möglichkeit für einen Double, einen gerundeten Wert zu speichern, damit hätte das eh nicht funktioniert. Die externe Komponente ist fehlerhaft. Doppel haben keine feste Anzahl von Dezimalstellen. Es hätte den Dezimaltyp verwenden sollen. –