为什么数字作为浮点数传递时,分数的分子和分母为什么更大?
>>> 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
答案 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的幂。