在Python中,您可以具有任意大的整数(尽管存储它们可能会占用所有内存)。另一方面,使用浮点数时,它们最终会溢出,并且如果您尝试使用小数点过多的小数点,则会失去精度。
decimal.Decimal
类是哪个类?
小数点前可以有任意数量的数字吗?小数点后呢?有什么限制?
答案 0 :(得分:2)
Decimal
具有用户指定的精度;您可以修改当前上下文以指定必须保留多少个十进制数字。根据{{3}}:
与基于硬件的二进制浮点数不同,十进制模块具有用户可更改的精度(默认为28位),可以与给定问题所需的精度一样大。
然后是一个示例:
>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')
如果确实需要,您可以将精度提高到1,000,000或更高,但是数学会慢。实际上,大多数问题都使您不再需要任何精确度。 the docs;他们需要在小数点左边保留更多的位置来表示幅度,但是对于大多数用途而言,默认精度28就足够了,将其提高到40或50应该可以涵盖任何与真实世界数字相关的用例。>
该限制不在小数位左侧或处。这是数字的总数。因此,如果您的Decimal(1000000) + Decimal("0.0001")
的精度设置为10
或更小,则结果将等于Decimal(1000000)
(它可能会显示其他零以匹配精度,但是{{1 }}被删除)。舍入或溢出情况下的行为可通过信号进行配置,因此它可以设置标志,或在发生标志时引发异常。文档对此进行了更详细的介绍。