Best way to convert fractions.Fraction to decimal.Decimal?(最好的小数转换方式。小数到小数。小数?)
本文介绍了最好的小数转换方式。小数到小数。小数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在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')
,这对我来说似乎有点傻。如有任何帮助,我们将不胜感激!
推荐答案
将分数的划分留给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')
这篇关于最好的小数转换方式。小数到小数。小数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:最好的小数转换方式。小数到小数。小数?
猜你喜欢
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01