Python中用于浮点数的分数

时间:2018-10-19 13:45:49

标签: python

为什么数字作为浮点数传递时,分数的分子和分母为什么更大?

>>> from fractions import Fraction
>>> 
>>> a = Fraction(2.34)
>>> print(a)
658651445502935/281474976710656
>>> 
>>> 658651445502935/281474976710656
2.34
>>> 
>>> b = Fraction('2.34')
>>> print(b)
117/50
>>> 

PS:在python IDLE上是python

2 个答案:

答案 0 :(得分:2)

浮点数不是您尝试传递的十进制值的精确表示。有不明确之处。考虑阅读类似"What Every Programmer Should Know About Floating-Point Arithmetic."

的文章

答案 1 :(得分:1)

浮点数已经是有理数,因此到小数类型的转换直接来自浮点数的基础表示。

(2.34).as_integer_ratio() == (658651445502935, 281474976710656)

但并非所有分数(有理数)都可以准确地表示为浮点数。我不会详细解释浮点数(其他人已经发布了指向出色解释的链接),但是一个重要的限制是分母始终是2的幂。

在2.34 = 117/50的情况下,请注意50不是2的幂。但是,浮点数的分母是281474976710656,即2 48

当您将字符串传递给Fraction()时,该值将被解析为以10为底的数字,并且不会转换为中间浮点类型。因此,分母将更精确,因为分母可以是任何整数,而不仅仅是2的幂。