最好的小数转换方式。小数到小数。小数?

编程入门 行业动态 更新时间:2024-10-25 23:35:18
本文介绍了最好的小数转换方式。小数到小数。小数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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')

这篇关于最好的小数转换方式。小数到小数。小数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-03-13 17:39:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/620853.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小数   最好的   数到   方式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!