浮点数需要显示为分数
Floating point number needs to be displayed as a fraction
请您针对以下问题提出建议。
首先我们必须用分子除以分母以获得浮点数。
那么小数点后的数字需要显示为分数。
当 9 除以 4 时,它必须显示为 2 1/4.This 工作正常。
13除以5需要显示为2 3/5
我的代码不适用于第二种情况。 获取输出为
2 5404319552844595/9007199254740992.
第一步:
分子除以分母得到商
使用 (nmr%dnr
).
计算余数
第 2 步:
再将上一步得到的余数除以分母。
使用 Fractions
内置方法将浮点数转换为分数。
第 3 步:
输出存储在元组中并打印输出。
t1=(int(q),r)
.
代码:
from fractions import Fraction
def printValue(num,den):
rem=0.0;q=0.0;
q=float(num)/float(den)
rem=float(num)%float(den)
if rem>0:
#print ("%0.2f"%(rem/den))
r=Fraction(round(rem/den,2))
t1=(int(q),r) #Output is stored in a tuple
return t1
else:
t2=(int(q),)
return t2
num=int(input())
den=int(input())
z=printValue(num,den)
for i in z:
print(i,end=" ")
您可以使用 divmod
.
def printValue(num, den):
x, r = divmod(num, den)
print(f'{x if x else ""} {r}/{den}')
printValue(9, 4)
# prints:
2 1/4
printValue(13, 5)
# prints:
2 3/5
printValue(2, 5)
# prints:
2/5
问题是 floating point is broken... 或者更确切地说,它的准确性有限。一个小数只有在其分母是 2 的幂时才能准确表示,这说明 9/4 给出了准确且预期的结果。
但是 Python 很棒。 Fraction
class 有一个 limit_denominator()
方法,它通过搜索有限的分母(默认为 1000000 ).
演示:
>>> f = 3/5
>>> Fraction(f)
Fraction(5404319552844595, 9007199254740992)
>>> Fraction(f).limit_denominator()
Fraction(3, 5)
请您针对以下问题提出建议。
首先我们必须用分子除以分母以获得浮点数。 那么小数点后的数字需要显示为分数。
当 9 除以 4 时,它必须显示为 2 1/4.This 工作正常。
13除以5需要显示为2 3/5
我的代码不适用于第二种情况。 获取输出为
2 5404319552844595/9007199254740992.
第一步:
分子除以分母得到商
使用 (nmr%dnr
).
第 2 步:
再将上一步得到的余数除以分母。
使用 Fractions
内置方法将浮点数转换为分数。
第 3 步:
输出存储在元组中并打印输出。
t1=(int(q),r)
.
代码:
from fractions import Fraction
def printValue(num,den):
rem=0.0;q=0.0;
q=float(num)/float(den)
rem=float(num)%float(den)
if rem>0:
#print ("%0.2f"%(rem/den))
r=Fraction(round(rem/den,2))
t1=(int(q),r) #Output is stored in a tuple
return t1
else:
t2=(int(q),)
return t2
num=int(input())
den=int(input())
z=printValue(num,den)
for i in z:
print(i,end=" ")
您可以使用 divmod
.
def printValue(num, den):
x, r = divmod(num, den)
print(f'{x if x else ""} {r}/{den}')
printValue(9, 4)
# prints:
2 1/4
printValue(13, 5)
# prints:
2 3/5
printValue(2, 5)
# prints:
2/5
问题是 floating point is broken... 或者更确切地说,它的准确性有限。一个小数只有在其分母是 2 的幂时才能准确表示,这说明 9/4 给出了准确且预期的结果。
但是 Python 很棒。 Fraction
class 有一个 limit_denominator()
方法,它通过搜索有限的分母(默认为 1000000 ).
演示:
>>> f = 3/5
>>> Fraction(f)
Fraction(5404319552844595, 9007199254740992)
>>> Fraction(f).limit_denominator()
Fraction(3, 5)