2016-03-21 9 views
4

ich ziemlich seltsam finden, dass die Funktion Runde der Python ein numpy.float64 zurückgibt, wenn die Eingabe eine numpy.float64 ist, aber es gibt einen int wenn der Eingang ein float ist. Beispiel:Verhalten von Rund Funktionen Python, wenn die Eingänge von dem Typ np.float64

from numpy import float64 
type(round(float64(3243.43))) 
>>> numpy.float64 
type(round(float(3243.43))) 
>>> int 

Warum Runde ist in der ersten Zeile eine numpy.float64 und nicht und int zurück?

Anmerkung: Ich verwende: Python 3.5.1 [MSC v.1900 64 Bit (AMD64)]

+0

Ich habe das gleiche Beispiel laufen und gibt mir – efirvida

+0

@efirvida in beiden Fällen schwimmen: Sie sind auf Python 2 oder einem Python-3-Version von, bevor sie das Verhalten geändert. – user2357112

+0

Ich benutze Python 2.7.9 und numpy 1.8 – efirvida

Antwort

5

Wenn das Argument kein Python float ist, gibt es einen Unterschied zwischen Verhalten Python 2 und 3. In Python 2.x konvertiert round() das Argument in eine float. In Python 3.x ruft round() die Methode __round__ des Arguments auf. Die Methode __round__ kann einen anderen Typ zurückgeben. Insbesondere wenn das Argument ein int ist, wird das Ergebnis ein int sein. Die gleiche Änderung wurde an , math.floor und math.trunc vorgenommen. Sie rufen die entsprechenden Methoden __ceil__, __floor__ und __trunc__ auf.

Weitere Einzelheiten finden Sie PEP 3141

+0

Ich würde das zur Antwort hinzufügen Die '__round__' Methode für ein int in Python 3.x gibt eine Ganzzahl zurück. – jfosoriot

Verwandte Themen