如何在python中高精度地将浮点数转换为整数的比率?

问题描述

问题:

我想以最简单的形式将浮点数转换为整数的比率。 (不是 this question 的副本,请参阅下面的“编辑”)。例如,0.1 = 1,100.66666... = 2,3 等。在下面的代码片段中,我尝试使用 {{3} 为 x = 0.1,0.2,...,1.0 执行此操作};该方法仅适用于 x = 0.5x = 1.0。为什么此算法对于 x 的其他值会失败,有什么更好的方法可以做到这一点?如果相关,我的用例将用于 dx ~ 0.0005 = x[1] - x[0] 用于 0.0005 < x 10.0

代码

import numpy as np

f = np.vectorize(lambda x : x.as_integer_ratio())

x = np.arange(0.1,1.1,0.1)
nums,dens = f(x)
for xi,numerator,denominator in zip(x,nums,dens):
    print("\n .. {} = {} / {}\n".format(xi,denominator))

输出

 .. 0.1 = 3602879701896397 / 36028797018963968


 .. 0.2 = 3602879701896397 / 18014398509481984


 .. 0.30000000000000004 = 1351079888211149 / 4503599627370496


 .. 0.4 = 3602879701896397 / 9007199254740992


 .. 0.5 = 1 / 2


 .. 0.6 = 5404319552844595 / 9007199254740992


 .. 0.7000000000000001 = 6305039478318695 / 9007199254740992


 .. 0.8 = 3602879701896397 / 4503599627370496


 .. 0.9 = 8106479329266893 / 9007199254740992


 .. 1.0 = 1 / 1

编辑:

这不是真正的重复。原始问题中接受的答案的两种方法都未能满足我的 MWE 的基本用例。要表明 Fraction 模块给出了相同的错误

import numpy as np
from fractions import Fraction

f = np.vectorize(lambda x : Fraction(x))

x = np.arange(0.1,0.1)
y = f(x)
print(y)

## OUTPUT
[Fraction(3602879701896397,36028797018963968)
 Fraction(3602879701896397,18014398509481984)
 Fraction(1351079888211149,4503599627370496)
 Fraction(3602879701896397,9007199254740992) Fraction(1,2)
 Fraction(5404319552844595,9007199254740992)
 Fraction(6305039478318695,9007199254740992)
 Fraction(3602879701896397,4503599627370496)
 Fraction(8106479329266893,1)]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...