2016-07-10 14 views
1

Warum unterstützt Math.Round()float nicht?Warum unterstützt Math.Round() nicht float?

edit:

Menschen sollten nicht diese schließen stimmen. Es ist nicht Meinung basiert. Wie in den Kommentaren unten angegeben, gibt es einen echten technischen Grund, dass Math.Round kein int zurückgibt, was bedeutet, dass große Gleitkommazahlen nicht in einer Ganzzahl ähnlicher Größe ohne Überlauf gespeichert werden können.

Also ich frage, ob es tatsächlich ein Grund ist, dass float Überlastungen nicht in Math.Round enthalten, Math.Ceil, etc ..

Die Antwort kann nicht sein, aber das bedeutet nicht, diese Frage ist Meinung basiert .

+0

Es ist ziemlich fraglich, dass es * double * unterstützt, da das Ergebnis nie genau ist. Sie würden nur noch 8 weitere Ziffern mit * float * erhalten. Kein Problem, da fast jede Sprache eine implizite Konvertierung von Float zu Double unterstützt. –

+0

Die eigentliche Frage ist: __Warum gibt es nicht 'ìnt'? __ – TaW

+0

@TaW Ich denke, die Antwort ist jedoch ziemlich einfach: Eine Gleitkommazahl kann viel größere Werte enthalten als ähnlich große Ganzzahlen. Wenn man also einen Float zu einem int runden würde, würde das zu einem Überlauf mit großen Zahlen führen. – bitwise

Antwort

4

Es hängt davon ab, was Sie mit "Unterstützung" meinen.

Wenn Sie versuchen, eine Methode mit Überladungen mit einem Typ aufzurufen, den sie nicht direkt unterstützt (z. B. Aufruf von Math.Round(float)), wird versucht, die beste Version (falls vorhanden) zu ermitteln. Wie das gemacht wird, wird ausführlich in Abschnitt 7.5.3 der C# -Sprachspezifikation 5.0 diskutiert.

Da float von implicitly converted bis a double sein kann, bedeutet dies, dass Math.Round(Double) aufgerufen wird.

jedoch diese Version gibt auch eine double zurück, so dass Sie explicitly cast die Ergebnisse in eine float haben würde, wenn das ist, was Sie wollen.

Verwandte Themen