9
votes

Comportement de Python étrange int

Jetez un oeil à ceci:

345.0
345
344


0 commentaires

3 Réponses :


12
votes

impression (ou plutôt float .__ str __ code>) arrondit la sortie. xxx pré>

la représentation du point flottant pour 41063625 ** (1.0 / 3) Code> est inférieur à 345, alors lorsque vous prenez le int code> de celui-ci, vous obtenez 344 plutôt que 345. P>

In [19]: int(round(41063625 ** (1.0/3)))
Out[19]: 345


3 commentaires

Ah bien qui a du sens - ne savait pas que c'était une fonctionnalité de imprimer pour arrondi comme ça. Merci!


Il pourrait être illustratif de poster la sortie de STR (41063625 ** (1,0 / 3)) car c'est ce que impression est en réalité imprimée.


@ A.R.S.: En 3.2+ Float .__ STR __ Utilise le REC , qui utilise le nombre minimum de chiffres sur arrondir sur le flotteur d'origine. Par exemple: Imprimer (41063625 ** (1.0 / 3)) Sorties 344.99999999999999 .



1
votes

parce que 41063625 ** (1.0 / 3) code> n'est pas 345.0:

In [7]: 41063625 ** (1.0/3)
Out[7]: 344.9999999999999

In [8]: int(344.9999999999999)
Out[8]: 344


0 commentaires

0
votes

Eh bien, ce que j'ai eu des calculs est quelque chose comme ceci:

>>> 41063625 ** (1.0/3)
344.9999999999999
>>> int(345.0)
345
>>> int(41063625 ** (1.0/3))
344


0 commentaires