You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何返回未约分的分数,避免Fraction类自动化简?

Python 标准库的 fractions.Fraction 核心设计逻辑就是自动将分数约分为最简形式,没有内置开关可以关闭约分行为。要实现保留原始分子分母的未化简分数需求,可以用以下两种方案:

方案1:自定义未约分分数类

完全自己实现基础的分数结构,原生不做自动约分,可按需扩展和原生Fraction兼容的功能:

from fractions import Fraction

class UnreducedFraction:
    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator
        # 可选属性:如果后续需要约分结果,提前预存原生Fraction对象
        self.reduced_frac = Fraction(numerator, denominator)
    
    def __str__(self):
        return f"{self.numerator}/{self.denominator}"
    
    def __repr__(self):
        return f"UnreducedFraction({self.numerator}, {self.denominator})"

# 调用示例
def frac(n, d):
    return UnreducedFraction(n, d)

print(frac(2,4)) # 输出 2/4

方案2:基于原生Fraction做包装

如果需要用到原生Fraction的所有运算能力,只需要额外保留原始分子分母,直接把原始值和Fraction对象绑定返回即可:

from fractions import Fraction

def frac(n, d):
    # 返回结构:(原始分子, 原始分母, 已约分的Fraction对象)
    return (n, d, Fraction(n, d))

# 使用示例
res = frac(2,4)
print(f"{res[0]}/{res[1]}") # 输出未化简的 2/4
# 需要做分数运算时直接使用res[2]即可

额外注意:你原有代码里写的 Fraction(n/d) 是错误用法,n/d 会先被计算为浮点数,很容易出现精度丢失,正确的原生 Fraction 初始化应该直接传两个参数:Fraction(n, d)。

内容的提问来源于stack exchange,提问作者Satan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:03