Maison > développement back-end > Tutoriel Python > Pourquoi la fonction round() arrondit-elle les nombres demi-flottants au nombre pair le plus proche en Python ?

Pourquoi la fonction round() arrondit-elle les nombres demi-flottants au nombre pair le plus proche en Python ?

Barbara Streisand
Libérer: 2024-10-17 15:48:03
original
698 Les gens l'ont consulté

Why Does round() Function Round Half Float Numbers to the Nearest Even Number in Python?

Understanding Half Float Number Rounding Behavior in Python

When dealing with half float numbers in Python, the round() function can exhibit an unexpected behavior, as illustrated by the following code snippet:

<code class="python">for i in range(1, 15, 2):
    n = i / 2
    print(n, "=&gt;", round(n))</code>
Copier après la connexion

This code prints:

0.5 =&gt; 0
1.5 =&gt; 2
2.5 =&gt; 2
3.5 =&gt; 4
4.5 =&gt; 4
5.5 =&gt; 6
6.5 =&gt; 6
Copier après la connexion

Instead of rounding up all floating values, round() rounds them to the nearest even number. This peculiar behavior is attributed to "rounding half to even," also known as "bankers rounding."

Cause of Bankers Rounding

According to the Python documentation, round() rounds half towards even to prevent compounding rounding errors. By rounding to the nearest even number, the overall rounding effect is averaged out.

Correcting the Rounding Behavior

To obtain the desired rounding behavior, specifically rounding up from half, the decimal module can be utilized. By defining a local context and setting the rounding parameter to ROUND_HALF_UP, Python's rounding function can be customized.

Here's an example demonstrating how to round up from half using the decimal module:

<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, '=&gt;', n.to_integral_value())</code>
Copier après la connexion

The output of this code is:

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

Conclusion

To achieve correct rounding behavior for half float numbers, the decimal module in Python provides the necessary tools for specifying the desired rounding strategy. By utilizing the ROUND_HALF_UP option, half float numbers can be rounded up consistently, as shown in the provided example.

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