python中给出复杂ans的实数的分数

2024-09-30 18:12:46 发布

您现在位置:Python中文网/ 问答频道 /正文

从分数中导入分数,给出实数的分数表示,但给出的回答相当复杂,用纸笔法似乎非常简单。
Fractions(.2) giving answer 3602879701896397/18014398509481984
也就是0.2000000000000110223024625157,差不多是0.2,但我希望是1/5。
我知道这个用法有limit(),但我只需要最小的分子和分母,它给出了准确的实数bcoz我要处理的是一个大范围内的很多数字,所以我不能对所有人使用相同的limit()参数。你知道吗


Tags: answer用法参数数字分子分数limit实数
2条回答

可以使用Fraction类来表示0.2,并且可以按如下方式访问分子和分母:

>>> from fractions import Fraction
>>> f = Fraction(1, 5)
>>> f.numerator
1
>>> f.denominator
5

希望有帮助。你知道吗

你奇怪的输出来自float point problems。在某些情况下,可以通过使用Fraction.limit_denominator()限制分母来克服这个问题。如果分母的实际值大于您使用的阈值,此过程当然也会导致舍入错误。此阈值的默认值为1000000,但也可以使用较小的值。你知道吗

import fractions

print(fractions.Fraction(0.1))
>>>3602879701896397/36028797018963968

#lower the threshold to 1000
print(fractions.Fraction(0.1).limit_denominator(1000))
>>>1/10

#won't work for smaller fractions, use default of 1,000,000 instead
print(fractions.Fraction(0.00001).limit_denominator(1000))
>>>0
print(fractions.Fraction(0.00001).limit_denominator())
>>>1/100000

当然,正如第一句中所解释的,由于浮点数的存储方式,存在精度限制。如果数字的大小是10^9,那么分数部分的10位数就不能准确表示为

a = 1234567890.0987654321
print(a)

演示。但是你可能会问自己,如果你真的需要10^-15的准确度,如果你的输入没有反映这个准确度。如果您想获得更高的精度,那么必须从一开始就使用^{}模块,并在所有数学运算中提高精度级别。更好的方法是从一开始就将分子和分母作为整数值处理—在Python integer values are theoretically not restricted in size

相关问题 更多 >