Python 3.6.4分数输出异常:预期4/1等却输出大分母分数
问题分析与解决方案
看起来你遇到的是浮点数精度导致的Fraction异常展开问题,我来帮你拆解清楚:
问题根源
你预期输出4/1、4/3这类简洁的整数分数,但后续出现超大分子分母的奇怪分数,本质原因是代码里的w变量在循环中被转换成了浮点数类型。
举个例子:如果你的循环里误写了w = w + 2.0而非整数加法w += 2,w就会从整数变成双精度浮点数。而fractions.Fraction在接收浮点数参数时,会把浮点数的二进制近似值转换成精确的有理数形式——比如4/3的浮点数近似值对应的精确分数就是你看到的6004799503160661/4503599627370496,这完全符合Fraction的设计逻辑,但不是你想要的结果。
修复后的完整代码
把w的更新逻辑改成整数运算就能解决问题,以下是修复后的代码:
from fractions import Fraction q = int(input("Choose a number: ")) a = 4 count = q w = 1 while count > 0: print(Fraction(a, w)) w += 2 # 用整数加法保持w的整数类型 count -= 1
额外调试小技巧
如果不确定变量类型是否正确,可以在循环里加一行代码验证:
print(type(w)) # 确认w始终是<class 'int'>而非<class 'float'>
内容的提问来源于stack exchange,提问作者Mikhail Beresnev
相关产品推荐
相关产品推荐

