2016-08-12 70 views
0

我想限制我的float的精度,并将其用作下一个操作的精确值,但我在做十进制模块时出错。Python十进制精度和四舍五入

from decimal import * 

factor = 350/float(255) 

# Settings 
getcontext().prec = 1 
getcontext().rounding = ROUND_UP 

print Decimal(factor) 

Python的输出: 1.372549019607843145962533526471816003322601318359375

预期和希望的结果:1.4

+0

使用'np.round'。 – Julien

+0

简单地创建一个'Decimal'对象不会绕到当前上下文。为此,有一个诀窍:你可以应用一元加号,如'+十进制(因子)'。话虽如此,这仍然不会达到你想要的:'prec'指的是有效位数的总数,而不是指向该点后的位置数。所以在这种情况下,你需要'prec = 2'。 –

+0

您可能还想查看'Decimal.quantize'方法。 –

回答

0

从Python文档:(https://docs.python.org/2/library/decimal.html

新小数的意义仅由数确定数字输入。上下文精度和舍入仅在算术运算期间起作用

getcontext().prec = 6 
Decimal('3.0') 
Decimal('3.0') 
Decimal('3.1415926535') 
Decimal('3.1415926535') 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85987') 
getcontext().rounding = ROUND_UP 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85988') 

因此您需要在操作中使用小数,而不是在打印结果时使用。