Rundungsfehler in Python mit nicht-ungeraden Zahlen?

7

Ich bin Anfänger in Python, und ich habe eine Frage.
Warum funktioniert das Runden einer Zahl wie 5.5, 7.5, (irgendwas) .5 mit ungeradem ganzzahligen Teil, der round(num) anwendet, richtig (Regel 5/4), aber Rundenzahl wie (alles) .5 mit nicht-ungeradzahligem ganzzahligen Teil Funktion gibt nur einen ganzzahligen Teil zurück? (Aber wenn wir eine kleine Zahl wie 0.000000001 zu dieser Dezimalzahl hinzufügen, funktioniert es richtig)

Ich meine das nächste:

%Vor%

gibt 10 zurück, und es ist korrekt. Aber

%Vor%

gibt 8 zurück, und es ist nicht korrekt. Und

%Vor%

gibt 9 zurück.

Warum es falsch funktioniert?
Ich benutze Python 3.2.2 unter Windows.

    
Ivan Akulov 10.04.2012, 17:46
quelle

1 Antwort

19

Python 3.x verwendet im Gegensatz zu Python 2.x Bankrunden für round() Funktion.

Dies ist das ​​dokumentierte Verhalten:

  

[I] f Zwei Vielfache sind gleich nahe, die Rundung erfolgt in Richtung der geraden Wahl (so sind zum Beispiel sowohl Runde (0,5) als auch Runde (-0,5) 0 und Runde (1,5) ist 2) / p>

Da Gleitkommazahlen von Natur aus nur Näherungen sind, sollte es nicht so sehr darauf ankommen, wie "exakte" Halbzahlen behandelt werden - es könnte sowieso immer Rundungsfehler in den vorhergehenden Berechnungen geben.

Bearbeiten : Um das alte Rundungsverhalten zu erhalten, könnten Sie

verwenden %Vor%     
Sven Marnach 10.04.2012, 17:50
quelle

Tags und Links