Python浮点比率

Python浮点比率,python,floating-point,python-3.3,fractions,Python,Floating Point,Python 3.3,Fractions,我尝试得到变量的比率,得到了意想不到的结果。有人能解释一下吗 >>> value = 3.2 >>> ratios = value.as_integer_ratio() >>> ratios (3602879701896397, 1125899906842624) >>> ratios[0] / ratios[1] 3.2 我正在使用python 3.3 但我认为(16,5)是更好的解决方案 为什么它对2.5 >&g

我尝试得到变量的比率,得到了意想不到的结果。有人能解释一下吗

>>> value = 3.2
>>> ratios = value.as_integer_ratio()
>>> ratios
(3602879701896397, 1125899906842624)
>>> ratios[0] / ratios[1]
3.2
我正在使用python 3.3

但我认为
(16,5)
是更好的解决方案

为什么它对
2.5

>>> value = 2.5
>>> value.as_integer_ratio()
(5, 2)

它不是16/5,因为
3.2
不是3.2。。。这是一个浮点粗略的近似值。。。例如:
3.200000000000000017764

使用简化分数:

>>> from fractions import Fraction
>>> Fraction(3.2)
Fraction(3602879701896397, 1125899906842624)
>>> Fraction(3.2).limit_denominator()
Fraction(16, 5)
从:

查找并返回分母最多为max_分母的与
self
最近的
分数。这种方法对于寻找给定浮点数的有理逼近非常有用

浮点数的精度有限,不能准确地表示许多数字;您看到的是一个四舍五入的表示,但实数是:

>>> format(3.2, '.50f')
'3.20000000000000017763568394002504646778106689453125'

因为浮点数表示为二进制分数的和;1/5只能通过将1/8+1/16+1/128+更多的二进制分数相加以增加2的指数来表示。

您期望的是什么?
16/5
?例如,为什么不
32/10
(16,5)
。但我明白为什么我会得到这么大的数字16/5是一个最简单的形式,可能重复:关于浮点数学的所有问题。谢谢,我知道如何使用
分数
我不明白为什么没有进一步扩展我的答案-获得“理智”的好方法代表:)但是为什么
2.5
2.5
3.2
不一样?@itdxer我认为它的值对于以
.5
作为除数的数字是相当稳定的。它们可以按照您定义的方式精确表示。@itdxer因为有些数字可以精确表示,有些则不能。。。请参阅链接,因为您可以用二进制(以2为基数)显示整数,但显示小数部分很困难,因为您可能无法准确地用二进制(以2为基数)写入十进制数。因此,编程语言尝试评估最接近预期结果的值。