【问题标题】:Convert fraction to decimal in Python在 Python 中将分数转换为小数
【发布时间】:2011-01-30 07:33:28
【问题描述】:

我想在 python 中转换 1/2,这样当我说 print x (其中 x = 1/2) 它返回 0.5

我正在寻找最基本的方法,不使用任何拆分函数、循环或映射

我试过 float(1/2) 但我得到 0... 谁能解释一下为什么以及如何解决它?

是否可以在不修改变量 x= 1/2 的情况下做到这一点?

【问题讨论】:

  • 你能详细说明without modifying the variable x= 1/2的意思吗?
  • 这是一个作为你所学课程的一部分的技巧问题吗?如果是,请将其标记为[作业]。
  • 在 Python 问题中标记你是在谈论 Python 版本 2 还是 3 也很好。
  • 由于Fraction 和Decimal 都是Python 标准库中的对象,因此标题中的问题暗示您想要这样做python - Best way to convert fractions.Fraction to decimal.Decimal? - Stack Overflow。这个问题想要做的是将给定的分数(作为分子和分母)转换为 float 对象。

标签: python python-2.x


【解决方案1】:

在 python 3.x 中,任何除法都返回一个浮点数;

>>> 1/2
0.5

要在 python 2.x 中实现这一点,你必须强制浮点转换:

>>> 1.0/2
0.5

或者从“未来”导入分区

>>> from __future__ import division
>>> 1/2
0.5

一个额外的:没有内置分数类型,但在 Python 的标准库中有一个:

>>> from fractions import Fraction
>>> a = Fraction(1, 2) #or Fraction('1/2')
>>> a
Fraction(1, 2)
>>> print a
1/2
>>> float(a)
0.5

等等……

【讨论】:

  • 更正 - 在 Python3 中,/ 进行浮点除法,// 进行整数除法;在 Python2 中,根据参数,/ 可以是浮点除法(如果至少一个 arg 是浮点数)或 int(如果所有 args 都是 int)
  • @NasBanov 使用术语 "int 除法" 可能会产生误导,因为它不仅仅做整数,例如0.8 // 0.11 计算结果为 7.0,正确的术语是 floor division
【解决方案2】:

如果输入是一个字符串,那么你可以直接在输入上使用分数:

from fractions import Fraction

x='1/2'
x=Fraction(x)  #change the type of x from string to Fraction
x=float(x)     #change the type of x from Fraction to float
print x

【讨论】:

    【解决方案3】:

    您可能正在使用 Python 2。您可以使用以下方法“修复”除法:

    from __future__ import division
    

    在脚本的开头(在任何其他导入之前)。默认情况下,在 Python 2 中,/ 运算符在使用整数操作数时执行整数除法,这会丢弃结果的小数部分。

    这已在 Python 3 中进行了更改,因此 / 始终是浮点除法。新的// 运算符执行整数除法。

    【讨论】:

    • 我不能把它放在一个函数中..它给我一个错误,说该行必须放在文件的开头..
    • 没错。另一种强制浮点除法的方法是使用至少一个浮点操作数。所以试试1/2.0,或1/float(2)。
    • 我知道那样,但问题是我无法修改输入.. 我无法更改 x = '1/2'.. 我所能做的就是对其应用不同的功能以获得0.5..有可能吗?
    • 没有。当你得到1/2 的结果时,它已经是零了。
    • 你到底在说什么“输入”?请详细说明您在做什么。
    【解决方案4】:

    或者,您可以通过指定小数或乘以 1.0 来强制浮点除法。例如(从 python 解释器内部):

    >>> print 1/2
    0
    >>> print 1./2
    0.5
    >>> x = 1/2
    >>> print x
    0
    >>> x = 1./2
    >>> print x
    0.5
    >>> x = 1.0 * 1/2
    >>> print x
    0.5
    

    编辑:看起来我在输入我的回复时被打败了:)

    【讨论】:

      【解决方案5】:

      任何地方都没有数量1/2。 Python 不表示具有内置类型的有理数 - 仅表示整数和浮点数。 1 除以 2 - 遵循整数除法规则 - 得到 0。float(0) 为 0。

      【讨论】:

      • 这取决于 python 的版本.... ow... 这是 2011 年的评论,所以实际上不需要对此投反对票...
      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2015-10-13
      相关资源
      最近更新 更多