""/> "">

Maison  >  Article  >  développement back-end  >  Pourquoi Python arrondit-il à moitié les nombres pairs ?

Pourquoi Python arrondit-il à moitié les nombres pairs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-17 15:53:29694parcourir

Why Does Python Round Half-Floats to Even Numbers?

Arrondi des nombres à demi-flottants

La fonction round() de Python présente un comportement inhabituel lors de l'arrondi des nombres à demi-flottants qui peut prêter à confusion. Examinons ce comportement plus en détail.

<code class="python">for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))</code>

Ce code s'imprime :

0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4
5.5 => 6
6.5 => 6

Contrairement aux attentes, les valeurs flottantes ne sont pas toujours arrondies. Au lieu de cela, ils sont arrondis au nombre pair le plus proche, même pour les demi-valeurs. Ce comportement est documenté dans la documentation Python sous "Numeric Types":

"round(x[, n])

x arrondi à n chiffres, arrondi à la moitié au pair. Si n est omis , la valeur par défaut est 0."

Cet arrondi au nombre pair le plus proche, connu sous le nom d'"arrondi des banquiers", vise à atténuer les erreurs d'arrondi en faisant la moyenne des arrondis.

Pour mieux contrôler comportement d'arrondi, le module décimal offre une approche plus flexible. L'exemple suivant montre comment arrondir à partir de la moitié à l'aide du module décimal :

<code class="python">from decimal import localcontext, Decimal, ROUND_HALF_UP
with localcontext() as ctx:
    ctx.rounding = ROUND_HALF_UP
    for i in range(1, 15, 2):
        n = Decimal(i) / 2
        print(n, '=>', n.to_integral_value())</code>

Sortie :

0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7

En ajustant le paramètre d'arrondi dans localcontext(), vous pouvez personnaliser l'arrondi comportement selon les besoins, garantissant des résultats précis pour des scénarios d'arrondi spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn