【发布时间】:2017-03-21 00:06:03
【问题描述】:
在 Python 中,fractions.Fraction 和 decimal.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') 对我来说似乎有点愚蠢。任何帮助将不胜感激!
【问题讨论】:
-
“在 Python 中,
fractions.Fraction和decimal.Decimal标准库类的存在有助于使有理数的算术保持精确。”不完全的。Decimal.decimal仍然是浮点数,它只是以 10 为底的浮点数。Decimal(1) / Decimal(3)无法给出准确的答案。
标签: python decimal standard-library fractions