我正在编写一个使用Fractions
模块的程序。我想得到浮点数的最简化部分。当我使用0.5
之类的数字进行尝试时,它可以正常工作:
>>> import fractions
>>> str(fractions.Fraction(0.5))
'1/2'
但是当我尝试使用0.55
或0.1
时,它显示的分子和分母都很高,而不是11/20
和1/10
。
>>> str(fractions.Fraction(0.1))
'3602879701896397/36028797018963968'
>>> str(fractions.Fraction(0.55))
'2476979795053773/4503599627370496'
我该怎么做才能确保脚本始终显示最简化的分数?是否可以使用Fractions
模块或其他模块来完成此操作,或者我必须自己编写该函数?
答案 0 :(得分:2)
尝试一下:
fractions.Fraction(0.1).limit_denominator()
查看结果:
In [77]: str(fractions.Fraction(0.55).limit_denominator())
Out[77]: '11/20'
In [78]: str(fractions.Fraction(0.1).limit_denominator())
Out[78]: '1/10'
答案 1 :(得分:2)
传递0.55
时,您传递的是浮点数,因此在Fraction
接收值之前,它已经是不精确的表示形式。
或者,如果您传递字符串,则可以获得所需的确切值:
>>> fractions.Fraction('0.55')
Fraction(11, 20)
答案 2 :(得分:0)
尝试使用docs中的decimal
模块示例:
>>> from fractions import Fraction
>>> from decimal import Decimal
>>> Fraction(Decimal('0.55'))
>>> Fraction(11, 20)
>>> str(Fraction(11, 20))
>>> '11/20'
答案 3 :(得分:0)
将其作为字符串传递以获得简化的分数:
>>> fractions.Fraction('0.1')
Fraction(1, 10)
>>> str(fractions.Fraction('0.1'))
'1/10'