如何得到正确的十进制结果
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)
我正在尝试编写一个程序来搜索小数基数中整数的重复表示形式。因此,我必须做这样的事情:
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)