我想知道是否有什么方法可以阻止Python在使用fractions模块时自动减少分数。例如:
>>> import fractions
>>> fractions.Fraction(8,16)
Fraction(1, 2)
我想将分数保留为 Fraction(8,16)。是否可以使用自定义类或类似类?任何示例代码将不胜感激!
谢谢! 苏曼特
h/t “bowlofred” at python-forum.io 对于这个未记录的黑客:
from fractions import Fraction
def add_nonormal(a: Fraction, b: Fraction) -> Fraction:
if a.denominator == b.denominator:
c_numerator = a.numerator + b.numerator
c_denominator = a.denominator
else:
c_numerator = a.numerator*b.denominator + b.numerator*a.denominator
c_denominator = a.denominator*b.denominator
return Fraction(c_numerator, c_denominator, _normalize=False)
def sub_nonormal(a: Fraction, b: Fraction) -> Fraction:
return add_nonormal(a, -b)
def mul_nonormal(a: Fraction, b: Fraction) -> Fraction:
c_numerator = a.numerator*b.numerator
c_denominator = a.denominator*b.denominator
return Fraction(c_numerator, c_denominator, _normalize=False)
def reciprocal_nonormal(x: Fraction) -> Fraction:
return Fraction(*reversed(x.as_integer_ratio()), _normalize=False)
def div_nonormal(a: Fraction, b: Fraction) -> Fraction:
return mul_nonormal(a, reciprocal_nonormal(b))
assert add_nonormal(Fraction(1, 6), Fraction(2, 6)).as_integer_ratio() == (3, 6)
assert add_nonormal(Fraction(1, 2), Fraction(1, 6)).as_integer_ratio() == (8, 12)
如果您“错误”使用
Fraction
进行广泛的数学计算,并且所有不必要的中间 gcd
调用开始使操作陷入困境,这也很有用。