用python将不正确的分数转换为混合数

用python将不正确的分数转换为混合数,python,fractions,Python,Fractions,我需要使用python将不适当的分数转换为混合数,甚至将浮点转换为混合数。我的代码如下: from fractions import Fraction numerator = int(input("Enter numerator ") ) denominator = int(input("Enter denominator ") ) num = numerator / denominator num = Fraction(num) print(num) def approximate_fra

我需要使用python将不适当的分数转换为混合数,甚至将浮点转换为混合数。我的代码如下:

from fractions import Fraction
numerator = int(input("Enter numerator ") )
denominator = int(input("Enter denominator ") )
num = numerator / denominator
num = Fraction(num) 
print(num)
def approximate_frac(src, epsilon):
    d = 0.0
    while 1:
        d += 1.0
        n = int(src * d)
        info = [(abs(n / d - src), n) for n in (n, n+1)]
        info.sort()
        err, n = info[0]
        if err < epsilon:
            return n, int(d)

print(approximate_frac(1.0/3.0, 0.001))
print(approximate_frac(2.0/17.0, 0.001))

如果输入为5和4,则输出为“5/4”,而不是一个混合数。

您可以使用除法和模运算器来打印:

整数部分是分子//分母

适当分数余数的分子是
分子%分母

当然,分母不会改变

>>> num = 5
>>> den = 4
>>> print(' %d %d/%d' % (num // den, num % den, den))
 1 1/4
浮动有点困难,因为你必须算出分母,而且通常不精确。有两种基本的方法(以及一些更为奇特的变体)可以做到这一点。您可以向上循环到最大分母并选择误差最小的分母,也可以选择可接受的最大误差并循环,直到找到在其下方给出结果的分母。执行后者的示例代码如下所示:

from fractions import Fraction
numerator = int(input("Enter numerator ") )
denominator = int(input("Enter denominator ") )
num = numerator / denominator
num = Fraction(num) 
print(num)
def approximate_frac(src, epsilon):
    d = 0.0
    while 1:
        d += 1.0
        n = int(src * d)
        info = [(abs(n / d - src), n) for n in (n, n+1)]
        info.sort()
        err, n = info[0]
        if err < epsilon:
            return n, int(d)

print(approximate_frac(1.0/3.0, 0.001))
print(approximate_frac(2.0/17.0, 0.001))

尝试手动执行此操作:

  a = numerator // denominator 
  b = numerator % denominator
  print '{} {}/{}'.format(a, b, denominator)
目前您正在打印“x/b”,如果输入是浮点,请先进行适当的翻译

希望能有所帮助。

从分数导入分数
def转换为混合数字(num):
“”“将数字格式化为混合分数。
示例:
将_转换为_混合_数字('-55/10')#'-51/2'
将_转换为_混合_数字(-55/10)#'-51/2'
将_转换为_混合_数字(-5.5)#'-5 1/2'
Args:
num(int | float | str):要格式化的数字。它被强制转换为字符串。
返回:
str:`num``格式为混合分数。
"""
num=分数(str(num))#使用str(num)防止浮点不准确
n、 d=(num.分子,num.分母)
m、 p=divmod(abs(n),d)
如果n<0:
m=-m
返回“{}{}/{}”。如果m!=0,p>0\
else“{}”。如果m!=0 \
else'{}/{}'。格式(n,d)

可以通过将分子和分母作为数字、字符串或分数实例传递给函数来使用该函数。或者可以修改它,将分子和分母作为单独的变量。

您可以使用
分数
获取
浮点的分母或浮点的字符串表示形式。例如,
f=分数('3.14159265359');f、 分子;f、 分母
。此外,您可以使用查找分母最多为
最大分母的最近分数。这种方法似乎很有用,因此对于该邻域中的分母,近似值尽可能好。例如,当使用35000的
max_分母
转换时,3.141592653589793(pi的近似值)为104348/33215=3.1415926539214212,精确到10位。还有
a,b=divmod(分子,分母)
在一次函数调用中同时获得这两个值。使用
/
将逐个关闭负数。我不清楚您的代码,因为它会给我带来错误。我重新编写了代码,但我不确定你是怎么想的。这就是你的意思吗?如果你只是问,因为你正在寻找一种方法来表示精确的非整数(例如,没有浮点不准确),以更易于理解的方式对人类,而仍然精确地存储它们,你可以考虑使用<代码> DECIMALL()/<代码>代替,或除了,<代码>分数。没错,你看不到精确的数字,比如2的平方根,但我相信你可以存储精确的数值,你可以使用其他方法精确地四舍五入到任何数字,以便显示。