2016-06-29 26 views
2

eine Hälfte, das heißt 0,5 in dezimale, hat eine genaue Binärdarstellung: 0,1Warum ist das Runden von 0,5 (Dezimal) nicht exakt?

Dennoch, wenn ich ihn um auf ganzzahlige, I 0 erhalten statt 1 habe ich versucht, in Python und C, die gleich verhalten. Z.B. der Python-Code:

>>> a,b,c = 0.49, 0.5, 0.51 
>>> [round(x) for x in (a,b,c)] 
[0, 0, 1] 
>>> "%.0f %.0f %.0f" % (a,b,c) 
'0 0 1' 

Interessanterweise

>>> a,b,c = 0.049, 0.05, 0.051 
>>> [round(x,1) for x in (a,b,c)] 
[0.0, 0.1, 0.1] 
>>> "%.1f %.1f %.1f" % (a,b,c) 
'0.0 0.1 0.1' 

Ich kenne zahlreiche ähnliche Fragen, zum Beispiel Python rounding error with float numbers, die Python tutorial on floating point arithmetics und die obligatorische What Every Computer Scientist Should Know About Floating-Point Arithmetic.

Wenn eine Zahl eine exakte binäre Darstellung wie (Dezimal) 0,5 hat, sollte sie nicht korrekt gerundet werden?

edit: Das Problem tritt in Version 3.4.3, aber nicht in der Version 2.7.6

+0

ich nicht bekommen diese Ergebnisse - ich sehe, 0, 1, 1. Welche Version von Python werden Sie verwenden, und auf welcher Plattform? –

+1

Beachten Sie, dass während "0.5" eine exakte binäre Darstellung "0.05" hat nicht –

+4

Frage wurde bereits beantwortet: http://StackOverflow.com/Questions/10825926/python-3-x-rounding-behavior – HelloWorld

Antwort

8

Ich weiß, dass sie die Runde Methode in Python 3.

also unter v2.7.3 geändert:

In [85]: round(2.5) 
Out[85]: 3.0 

In [86]: round(3.5) 
Out[86]: 4.0 

unter V3.2.3:

In [32]: round(2.5) 
Out[32]: 2 

In [33]: round(3.5) 
Out[33]: 4 

ich weiß nicht, ob es Ihnen hilft, aber ich es als Antwort bin Entsendung da ich aufgrund meines schlechten Rufes nichts dazu sagen kann.

Die Frage wird beantwortet mehr richtig hier: Python 3.x rounding behavior

+0

Sorry, das beantwortet die Frage nicht –

+2

Gute Antwort. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior. – mtrw