Mengapakah bulat() Berfungsi Membundarkan Separuh Nombor Terapung kepada Nombor Genap Terdekat dalam Python?

Barbara Streisand
Lepaskan: 2024-10-17 15:48:03
asal
622 orang telah melayarinya

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>
Salin selepas log masuk

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
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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.

Atas ialah kandungan terperinci Mengapakah bulat() Berfungsi Membundarkan Separuh Nombor Terapung kepada Nombor Genap Terdekat dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!