gpt4 book ai didi

python - 将 fractions.Fraction 转换为 decimal.Decimal 的最佳方法?

转载 作者:太空狗 更新时间:2023-10-29 18:22:53 27 4
gpt4 key购买 nike

在 Python 中,fractions.Fractiondecimal.Decimal 标准库类的存在有助于保持有理数算术的精确性。对于不熟悉的人,它有帮助的地方的例子:

>>> 1 / 10 * 3
0.30000000000000004
>>> decimal.Decimal('1') / 10 * 3
Decimal('0.3')
>>> fractions.Fraction('1') / 10 * 3
Fraction(3, 10)

我的问题是,如果我有一个Fraction,将它转换为Decimal 的最佳方法是什么?

不幸的是,显而易见的解决方案不起作用:

>>> decimal.Decimal(fractions.Fraction(3, 10))
Traceback (most recent call last):
...
TypeError: conversion from Fraction to Decimal is not supported

现在我正在使用这段代码:

>>> decimal.Decimal(float(fractions.Fraction(3, 10)))
Decimal('0.299999999999999988897769753748434595763683319091796875')

现在,当我实际输出这个值时,任何数量的舍入都会将其转换为 0.3,我只在输出前立即进行此转换(所有核心数学都是用 Fraction 完成的)。不过,对我来说,我无法从 Fraction(3, 10) 中获取 Decimal('0.3') 似乎有点傻。任何帮助将不胜感激!

最佳答案

将分数除法留给 Decimal() 本身怎么样?

def decimal_from_fraction(frac):
return frac.numerator / decimal.Decimal(frac.denominator)

这就是 Fraction.__float__() 所做的事情(简单地将分子除以分母),但是通过将两个值中的至少一个转换为 Decimal 对象你可以控制输出。

这让您可以使用 decimal 上下文:

>>> decimal_from_fraction(fractions.Fraction(3, 10))
Decimal('0.3')
>>> decimal_from_fraction(fractions.Fraction(1, 55))
Decimal('0.01818181818181818181818181818')
>>> with decimal.localcontext() as ctx:
... ctx.prec = 4
... decimal_from_fraction(fractions.Fraction(1, 55))
...
Decimal('0.01818')

关于python - 将 fractions.Fraction 转换为 decimal.Decimal 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40468697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com