Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用.as_integer_ratio()时,是否有方法返回完全缩减的比率?_Python_Python 3.x_Floating Point_Floating Accuracy - Fatal编程技术网

Python 调用.as_integer_ratio()时,是否有方法返回完全缩减的比率?

Python 调用.as_integer_ratio()时,是否有方法返回完全缩减的比率?,python,python-3.x,floating-point,floating-accuracy,Python,Python 3.x,Floating Point,Floating Accuracy,我在一些浮点上调用.as_integer_ratio()时注意到了一些奇怪的情况。例如: (2.2).as_integer_ratio() 这将返回一个元组: (247697979553773112589906842624) 我想知道我是否能让它以某种方式直接返回11/5。2.2是最接近2.2的值的简写,但2.2实际上并不存在: >>> print('{:.16f}'.format(2.2)) 2.2000000000000002 如果需要十进制精确表示,则需要使用而不是f

我在一些浮点上调用.as_integer_ratio()时注意到了一些奇怪的情况。例如:

(2.2).as_integer_ratio()
这将返回一个元组: (247697979553773112589906842624)

我想知道我是否能让它以某种方式直接返回11/5。2.2是最接近2.2的值的简写,但2.2实际上并不存在:

>>> print('{:.16f}'.format(2.2))
2.2000000000000002
如果需要十进制精确表示,则需要使用而不是
float

>>> from decimal import Decimal
>>> Decimal('2.2').as_integer_ratio()  # Constructing from str is *mandatory* for proper precision
(11, 5)
。2.2是最接近2.2的值的简写,但2.2实际上并不存在:

>>> print('{:.16f}'.format(2.2))
2.2000000000000002
如果需要十进制精确表示,则需要使用而不是
float

>>> from decimal import Decimal
>>> Decimal('2.2').as_integer_ratio()  # Constructing from str is *mandatory* for proper precision
(11, 5)

@ShadowRanger的答案是正确的。将值“2.2”转换为最接近的二进制分数。和
.as\u integer\u ratio()
返回二进制分数。然而,附近还有其他有理数,它们在转换为浮点时会产生相同的二进制表示。使用树可以找到更简单的分数

gmpy2
实现了Stern-Brocot算法,它以
的形式公开。以_simple_fraction()
的形式公开


@ShadowRanger的答案是正确的。将值“2.2”转换为最接近的二进制分数。和
.as\u integer\u ratio()
返回二进制分数。然而,附近还有其他有理数,它们在转换为浮点时会产生相同的二进制表示。使用树可以找到更简单的分数

gmpy2
实现了Stern-Brocot算法,它以
的形式公开。以_simple_fraction()
的形式公开

除了11/5是不正确的。(IEEE 754二进制浮点中没有2.2这样的东西)。给出的比率是最接近2.2的代表值的完全缩减比率。11/5不正确除外。(IEEE 754二进制浮点中没有2.2这样的东西)。给出的比率是最接近2.2的代表值的完全缩减比率。