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

Linda Hamilton
Libérer: 2024-10-17 15:53:29
original
784 Les gens l'ont consulté

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>
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

Sortie :

0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal