How can I force division to be floating point? Division keeps rounding down to 0?
我有两个整数值
如何在下面的python中将
1 | c = a / b |
在python 2中,两个int的除法产生一个int。在python 3中,它产生一个float。我们可以通过从
1 2 3 4 5 6 | >>> from __future__ import division >>> a = 4 >>> b = 6 >>> c = a / b >>> c 0.66666666666666663 |
您可以通过执行
警告:正如评论者所指出的,如果
How can I force division to be floating point in Python?
I have two integer values a and b, but I need their ratio in floating point. I know that a < b and I want to calculate a/b, so if I use integer division I'll always get 0 with a remainder of a.
How can I force c to be a floating point number in Python in the following?
1 c = a / b
这里真正要问的是:
"我如何强制真正的除法,使
在python 3中,要得到真正的除法,只需执行
1 2 | >>> 1/2 0.5 |
楼层划分,整数的经典划分行为,现在是
1 2 3 4 | >>> 1//2 0 >>> 1//2.0 0.0 |
但是,您可能会一直使用python 2,或者您可能正在编写必须同时在2和3中工作的代码。
如果使用python 2在Python2中,这并不简单。与其他方法相比,处理经典的python 2划分的一些方法更好、更健壮。
关于python 2的建议您可以在任何给定模块中获得python 3划分行为,并在顶部导入以下内容:
1 | from __future__ import division |
然后将python 3样式划分应用于整个模块。它还可以在任何给定点的python shell中工作。在Python 2中:
1 2 3 4 5 6 7 | >>> from __future__ import division >>> 1/2 0.5 >>> 1//2 0 >>> 1//2.0 0.0 |
这确实是最好的解决方案,因为它可以确保模块中的代码与python 3更加向前兼容。
python 2的其他选项如果您不想将此应用于整个模块,那么只需要一些解决方法。最流行的方法是将其中一个操作数强制为浮点。一个强大的解决方案是
1 2 | >>> 1/(2 * 1.0) 0.5 |
来自
1 2 3 | >>> from operator import truediv >>> truediv(1, 2) 0.5 |
不推荐用于python 2
常见的是
1 2 3 4 5 6 | >>> 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 |
故意让代码更脆弱对我来说没有多大意义。
您也可以使用
1 2 3 4 | $ python -Qnew -c 'print 1/2' 0.5 $ python -Qnew -c 'print 1/2j' -0.5j |
1 | c = a / (b * 1.0) |
在python 3.x中,单斜杠(
1 | from __future__ import division |
在模块的顶部。
仅仅以浮点格式生成任何用于除法的参数也会以浮点格式生成输出。
例子:
1 2 | >>> 4.0/3 1.3333333333333333 |
或者,
1 2 | >>> 4 / 3.0 1.3333333333333333 |
或者,
1 2 | >>> 4 / float(3) 1.3333333333333333 |
或者,
1 2 | >>> float(4) / 3 1.3333333333333333 |
加一个点(
1 2 | >>> 4/3. 1.3333333333333333 |
或
1 2 3 | >>> from __future__ import division >>> 4/3 1.3333333333333333 |
这也行
1 2 | >>> u=1./5 >>> print u |
0.2
如果执行两个整数的除法,python将返回一个整数,那么需要执行以下操作:
1 | c = float(a)/b |
或
1 | c = a/float(b) |
然后得到
如果要默认使用"真"(浮点)除法,则有一个命令行标志:
1 | python -Q new foo.py |
有一些缺点(来自政治公众人物):
It has been argued that a command line option to change the
default is evil. It can certainly be dangerous in the wrong
hands: for example, it would be impossible to combine a 3rd
party library package that requires -Qnew with another one that
requires -Qold.
通过查看python手册页,您可以了解有关更改/警告除法行为的其他标志值的更多信息。
有关部门变更的详细信息,请阅读:PEP 238——更改部门操作员
1 2 3 | from operator import truediv c = truediv(a, b) |
This will also work
u=1./5
print u< /块引用>< /块引用>
1 0.212月24日13时19:58回答Gaurav Agarwal 67172279140
< /块引用>感谢Gauraw,这是一个很好的解决方案。如果分子和分母都是变量,"解决方案"可能是乘以1。按商计算。
例子:
1
2
3
4
5
6 aa = 2
bb = 3
aa / bb = 0
1. * aa / bb = 0.6666666666666666;-)
马克斯-意大利
1
2
3 from operator import truediv
c = truediv(a, b)其中a是被除数,b是除数。当两个整数被除后的商是浮点数时,此函数很方便。