首页 文章

我如何强制划分为浮点?分部继续向下舍入到0?

提问于
浏览
637

我有两个整数值 ab ,但我需要它们的浮点比率 . 我知道 a < b 并且我想计算 a / b ,所以如果我使用整数除法,我将总是得到0,余数为 a .

我如何在下面强制 c 成为Python中的浮点数?

c = a / b

13 回答

  • 3
    >>> from __future__ import division
    >>> a = 4
    >>> b = 6
    >>> c = a / b
    >>> c
    0.66666666666666663
    
  • 29
    from operator import truediv
    
    c = truediv(a, b)
    
  • 136

    这也有效

    >>> u=1./5
    >>> print u
    

    0.2

  • 5

    你可以通过 c = a / float(b) 强制转换为浮动 . 如果分子或分母是浮点数,那么结果也是 .


    警告:正如评论者指出的那样,如果 b 可能不是整数或浮点数(或表示一个的字符串),则不起作用 . 如果您可能正在处理其他类型(例如复数),则需要检查这些类型或使用其他方法 .

  • 1

    如果要在默认情况下使用“true”(浮点)除法,则有一个命令行标志:

    python -Q new foo.py
    

    有一些缺点(来自PEP):

    有人认为,更改默认值的命令行选项是邪恶的 . 在错误的人手中肯定是危险的:例如,将需要-Qnew的第三方库包与另一个需要-Qold的库组合在一起是不可能的 .

    您可以通过查看python手册页了解有关更改/警告分区行为的其他标志值的更多信息 .

    有关部门更改的完整详细信息,请阅读:PEP 238 -- Changing the Division Operator

  • 20

    添加一个点( . )以指示浮点数

    >>> 4/3.
    1.3333333333333333
    

    要么

    >>> from __future__ import division
    >>> 4/3
    1.3333333333333333
    
  • 130

    如果你进行两个整数的除法,python会返回一个整数,那么你需要这样做:

    c = float(a)/b
    

    要么

    c = a/float(b)
    

    然后将 c 作为 float 类型

  • 729
    from operator import truediv
    
    c = truediv(a, b)
    

    其中a是被除数,b是除数 . 当两个整数除法后的商是一个浮点数时,这个函数很方便 .

  • 681

    如何在Python中强制除法成为浮点?我有两个整数值a和b,但我需要它们的浮点比率 . 我知道a <b并且我想计算a / b,所以如果我使用整数除法,我将总是得到0,余数为a . 我怎样才能在下面强制c成为Python中的浮点数? c = a / b

    这里真正要问的是:

    “我如何强制真正的分裂,以便 a / b 将返回一个分数?”

    升级到Python 3

    在Python 3中,要获得真正的除法,您只需执行 a / b .

    >>> 1/2
    0.5
    

    Floor division,整数的经典除法行为,现在 a // b

    >>> 1//2
    0
    >>> 1//2.0
    0.0
    

    但是,您可能会遇到使用Python 2的问题,或者您可能正在编写必须同时适用于2和3的代码 .

    如果使用Python 2

    在Python 2中,它并不那么简单 . 处理经典Python 2分区的一些方法比其他方法更好,更健壮 .

    推荐Python 2

    您可以在任何给定模块中获得Python 3除法行为,并在顶部输入以下内容:

    from __future__ import division
    

    然后将Python 3样式分区应用于整个模块 . 它也适用于任何给定点的python shell . 在Python 2中:

    >>> from __future__ import division
    >>> 1/2
    0.5
    >>> 1//2
    0
    >>> 1//2.0
    0.0
    

    这确实是最好的解决方案,因为它可以确保模块中的代码与Python 3更加向前兼容 .

    Python 2的其他选项

    如果你没有't want to apply this to the entire module, you'限于几个解决方法 . 最受欢迎的是将其中一个操作数强制转换为浮点数 . 一个强大的解决方案是 a / (b * 1.0) . 在一个新的Python shell中:

    >>> 1/(2 * 1.0)
    0.5
    

    来自 operator 模块 operator.truediv(a, b)truediv 也很健壮,但这可能更慢,因为它是一个函数调用:

    >>> from operator import truediv
    >>> truediv(1, 2)
    0.5
    

    不推荐用于Python 2

    常见的是 a / float(b) . 如果b是复数,这将引发TypeError . 由于定义了复数的除法,因此在为除数传递复数时,没有除法失败是有道理的 .

    >>> 1 / float(2)
    0.5
    >>> 1 / float(2j)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can't convert complex to float
    

    故意让你的代码变得更脆弱对我来说没有多大意义 .

    您也可以使用 -Qnew 标志运行Python,但这有使用新的Python 3行为执行所有模块的缺点,并且您的某些模块可能需要经典除法,因此除了测试之外我不建议这样做 . 但要证明:

    $ python -Qnew -c 'print 1/2'
    0.5
    $ python -Qnew -c 'print 1/2j'
    -0.5j
    
  • 1

    在Python 3.x中,单斜杠( / )始终表示真(非截断)除法 . ( // 运算符用于截断除法 . )在Python 2.x(2.2及更高版本)中,您可以通过放置一个

    from __future__ import division
    

    在您的模块的顶部 .

  • 6

    这也将起作用u = 1. / 5 print u 0.2
    回答于2013年12月24日19:58 Gaurav Agarwal 6,7172279140

    感谢Gauraw,这就是诀窍而且是一个非常简洁的解决方案 . 如果分子和分母都是变量,则“解”可能乘以商1 .

    例:

    aa = 2
    bb = 3
    
    aa / bb = 0
    
    1. * aa / bb = 0.6666666666666666
    

    ;-)

    马克斯 - 意大利

  • 64

    只需使用浮点格式进行除法的任何参数也会产生输出浮点 .

    例:

    >>> 4.0/3
    1.3333333333333333
    

    要么,

    >>> 4 / 3.0
    1.3333333333333333
    

    要么,

    >>> 4 / float(3)
    1.3333333333333333
    

    要么,

    >>> float(4) / 3
    1.3333333333333333
    
  • 12
    c = a / (b * 1.0)
    

相关问题