如何得到正确的十进制结果

How to get the correct decimal result

我正在尝试编写一个程序来搜索小数基数中整数的重复表示形式。因此,我必须做这样的事情:

1.1**7

等于 1.9487171。然而,python 自动将该结果表示为浮点数,而给定值是 exact。这就是我需要的,这与四舍五入的浮点数不同。我还必须允许程序指定有多少位小数。我试过使用 decimal 模块,但无法正常工作。执行此操作的最佳方法是什么?

decimal.Decimal 个参数应该是 个字符串 。如果您使用 float,它会带来不精确性:

>>> decimal.Decimal('1.1')**7
Decimal('1.9487171')
>>>

VS

>>> decimal.Decimal(1.1)**7
Decimal('1.948717100000001101423574568')
>>>

decimal module 会给你确切的结果:

>>> Decimal('1.1') ** 7
Decimal('1.9487171')

对于非十进制基数,fractions module 将执行精确的算术运算。唯一的问题是输出是小数形式,而不是指示您似乎正在寻找的十进制表示法(可能带有重复的非终止序列):

>>> Fraction(3, 7) ** 5
Fraction(243, 16807)
>>> Context(prec=200).divide(243, 16807)
Decimal('0.014458261438686261676682334741476765633367049443684179211043017790206461593383709168798714821205450110073183792467424287499256262271672517403462842863092758969477003629440114238115071101326828107336229')

您是否尝试过在容差范围内检查相等性?例如

def approx(left, right, tolerance=1**10-6):
    if left - right < tolerance:
        return True
    else:
        return False

fractional number bases

听起来像 fractions,不是吗?

>>> import fractions
>>> fractions.Fraction(11, 10) ** 7
Fraction(19487171, 10000000)
>>> fractions.Fraction(13, 11) ** 7
Fraction(62748517, 19487171)