当前位置: 首页 > 面试题库 >

如何将十进制数转换为分数?

蒋寒
2023-03-14
问题内容

我想知道如何在Python中将小数转换为最低形式的分数。

例如:

0.25  -> 1/4
0.5   -> 1/2
1.25  -> 5/4
3     -> 3/1

问题答案:

您有两种选择:

  1. 用途float.as_integer_ratio()
    >>> (0.25).as_integer_ratio()
    

    (1, 4)

(从Python
3.6开始,您可以对decimal.Decimal()对象执行相同的操作。)

  1. 使用fractions.Fraction()类型:
    >>> from fractions import Fraction
    

    Fraction(0.25)
    Fraction(1, 4)

后者具有非常有用的str()转换:

>>> str(Fraction(0.25))
'1/4'
>>> print Fraction(0.25)
1/4

由于浮点值可能不精确,因此您可能会得到“奇怪”的分数;限制分母以某种程度“简化”分数,方法是Fraction.limit_denominator()

>>> Fraction(0.185)
Fraction(3332663724254167, 18014398509481984)
>>> Fraction(0.185).limit_denominator()
Fraction(37, 200)

如果您仍在使用Python 2.6,则Fraction()尚不支持float直接传递,但是您 可以 将以上两种技术结合使用:

Fraction(*0.25.as_integer_ratio())

或者,您可以只使用Fraction.from_float()class方法:

Fraction.from_float(0.25)

本质上是做同样的事情,例如,取整数比元组并将其作为两个单独的参数传递。

以及一个带有示例值的小演示:

>>> for f in (0.25, 0.5, 1.25, 3.0):
...     print f.as_integer_ratio()
...     print repr(Fraction(f)), Fraction(f)
... 
(1, 4)
Fraction(1, 4) 1/4
(1, 2)
Fraction(1, 2) 1/2
(5, 4)
Fraction(5, 4) 5/4
(3, 1)
Fraction(3, 1) 3

无论是fractions模块和float.as_integer_ratio()方法在Python 2.6是新的。



 类似资料:
  • 本文向大家介绍如何将十六进制转换为十进制?,包括了如何将十六进制转换为十进制?的使用技巧和注意事项,需要的朋友参考一下 而十六进制数是具有值是16的数字系统中的一个并且它具有唯一的16个码元:0,1,2,3,4,5,6,7,8,9和A,B,C,d,E ,其中A,B,C,D,E和F分别是十进制值10、11、12、13、14和15的单位表示。而十进制系统是最熟悉的号码系统向公众开放。它是10的基数,只

  • 本文向大家介绍如何将十进制转换为十六进制?,包括了如何将十进制转换为十六进制?的使用技巧和注意事项,需要的朋友参考一下 十进制是公众最熟悉的数字系统。它是基数10,只有10个符号-0、1、2、3、4、5、6、7、8和9。而十六进制是计算机或数字系统中最常见的数字系统颜色表示。它是基数16,只有16个符号:0、1、2、3、4、5、6、7、8、9和A,B,C,D,E,F。这些A,B,C,D ,E,F分

  • 在JavaScript中,有没有办法将十进制数(如)转换为表示为字符串的分数(如“)? 如果为此编写了一个名为decimalToFraction的函数,那么decimalToFraction(0.0002)将返回字符串。

  • 我需要写一个函数,将二进制分数转换成十进制分数,例如 我所做的:我在R包中搜索相关函数: 我在SOF搜索,发现以下内容: 0.001是: 所以,像内积的总和似乎完成了这个问题,我不知道如何在一般情况下做到这一点。 javascript案例: 如何将二进制分数转换为十进制分数?如何将二进制分数转换为十进制lisp大小写: 将分数从十进制转换为二进制

  • 问题内容: 我必须将,以s 表示(例如)转换为浮点值( IEEE-754 转换)。我没有使用strconv.ParseFloat函数做到这一点。还有什么我要用的吗?到目前为止我找不到。我也尝试先将其转换为整数,然后转换为浮点数,但结果是错误的。 我最后一次尝试的代码: 问题答案: 首先,需要说明输入的位长。由于十六进制表示形式有4个字节(8个十六进制数字),因此很可能是a (需要询问者澄清)。 您

  • 问题内容: 如何在Swift中将Int转换为UInt8?例。我想将数字22转换为0b00010110 问题答案: 您可以使用带有参数的初始化程序将十进制值转换为人类可读的二进制 表示形式 : 如果您愿意,也可以很容易地用任意数量的零填充它: 斯威夫特5