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

时间:2009-08-12 18:25:16

标签: python floating-point integer division python-2.x

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

如何强制c成为Python中的浮点数?

c = a / b

13 个答案:

答案 0 :(得分:765)

在Python 2中,两个整数的划分产生一个int。在Python 3中,它产生一个浮点数。我们可以从__future__导入新的行为。

>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663

答案 1 :(得分:698)

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


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

答案 2 :(得分:179)

  

如何在Python中强制除法成为浮点数?

     

我有两个整数值a和b,但我需要它们的浮点比率。我知道一个&lt; b我想计算a / b,所以如果我使用整数除法,我总是得到0,余数为a。

     

如何在Python中强制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的其他选项

如果您不想将其应用于整个模块,则仅限于一些解决方法。最受欢迎的是将其中一个操作数强制转换为浮点数。一个强大的解决方案是a / (b * 1.0)。在一个新的Python shell中:

>>> 1/(2 * 1.0)
0.5

来自truediv模块operator的{​​{1}}也很健壮,但这可能更慢,因为它是一个函数调用:

operator.truediv(a, b)

不推荐用于Python 2

常见的是>>> from operator import truediv >>> truediv(1, 2) 0.5 。如果b是复数,这将引发TypeError。由于定义了具有复数的除法,因此在为除数传递复数时,没有除法失败是有道理的。

a / float(b)

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

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

-Qnew

答案 3 :(得分:132)

c = a / (b * 1.0)

答案 4 :(得分:65)

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

来获得相同的行为
from __future__ import division

位于模块顶部。

答案 5 :(得分:29)

以浮点格式生成除法的任何参数也会产生浮点输出。

示例:

>>> 4.0/3
1.3333333333333333

,或者

>>> 4 / 3.0
1.3333333333333333

或,

>>> 4 / float(3)
1.3333333333333333

或,

>>> float(4) / 3
1.3333333333333333

答案 6 :(得分:20)

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

>>> 4/3.
1.3333333333333333

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

答案 7 :(得分:12)

这也可行

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

0.2

答案 8 :(得分:6)

如果你想默认使用“true”(浮点)除法,有一个命令行标志:

python -Q new foo.py

有一些缺点(来自PEP):

  

有人认为,命令行选项可以改变         默认是邪恶的。它在错误中肯定是危险的         手:例如,组合第3个是不可能的         派对图书馆包需要-Qnew与另一个         要求-Qold。

通过查看python手册页,您可以了解更多关于更改/警告除法行为的其他标志值。

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

答案 9 :(得分:6)

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

c = float(a)/b

c = a/float(b)

然后将c作为float类型

答案 10 :(得分:3)

from operator import truediv

c = truediv(a, b)

答案 11 :(得分:1)

from operator import truediv

c = truediv(a, b)

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

答案 12 :(得分:1)

  

这也可行

     
    
      
        

U = 1/5         打印你

      
    
  
0.2
     

12月24日和13日19:58回答Gaurav Agarwal 6,7172279140

感谢Gauraw,这就是诀窍而且是一个非常简洁的解决方案。 如果分子和分母都是变量,那么&#34;解决方案&#34;可能乘以商数乘以1.

示例:

aa = 2
bb = 3

aa / bb = 0

1. * aa / bb = 0.6666666666666666

- )

Max - 意大利