簡體   English   中英

如何在Python(版本3)中對十進制數字使用傳統的舍入?

[英]How to use traditional rounding for decimal numbers in Python (version 3)?

我正在嘗試找出如何使用Python版本3(特別是版本3.4.0)在小學和中學教授的傳統方法對小數進行四舍五入。

例如,使用十進制數0.745 ,我試圖將其舍入到最接近的百分之一。 傳統上,四舍五入后的值將為0.75,但以下代碼為我提供了0.74:

>>> import decimal
>>> a = decimal.Decimal("0.745")
>>> round(a, 2)
Decimal('0.74')

但是,將原始值更改為0.746似乎會返回0.75:

>>> import decimal
>>> b = decimal.Decimal("0.746")
>>> round(b, 2)
Decimal('0.75')

這似乎與傳統的四舍五入相矛盾(如果我沒記錯的話)。 有人可以引導我使用Python進行四舍五入的正確方法嗎?

更新:使用所選答案中的指導,這是我的問題的完整代碼解決方案:

>>> import decimal
>>> decimal.getcontext().rounding = decimal.ROUND_HALF_UP
>>> a = decimal.Decimal("0.745")
>>> round(a, 2)
Decimal('0.75')

這是預期的(也是最佳的)行為:無偏見的“銀行家舍入”,將一半舍入到最接近的偶數整數。

您可以隨時:

import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP

請注意, ROUND_HALF_UP有偏差,這就是為什么它不是默認值的原因。

如果您知道要舍入的精度,則可以隨時添加一些額外的舍入來舍入所需的值(不一定是其他人期望的值):

def round_my_way(dec, precision):
    dec += decimal.Decimal(1.0/10**(precision+1) / 2)
    return round(dec, precision)

print round_my_way(decimal.Decimal("0.746"), 2) # Prints 0.75
print round_my_way(decimal.Decimal("0.745"), 2) # Prints 0.75
print round_my_way(decimal.Decimal("0.744"), 2) # Prints 0.74

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM