我有两个整数值a和b,但我需要它们的浮点比。我知道a < b,我想计算a / b,所以如果我使用整数除法,我总是得到0,余数为a。
a
b
a < b
a / b
如何在下面的Python 2中强制c成为浮点数?
c
c = a / b
在3. x中,行为是相反的;参见为什么整数除法产生一个浮点数而不是另一个整数?对于相反的3. x特定问题。
c = a / (b * 1.0)
您可以通过执行c = a / float(b)强制转换为浮点数。如果分子或分母是浮点数,则结果也将是。
c = a / float(b)
注意:正如评论者所指出的,如果b可能不是整数或浮点数(或表示1的字符串),这将不起作用。如果您可能正在处理其他类型(例如复数),您需要检查这些类型或使用不同的方法。
在Python 2中,两个整数的除法产生一个int。在Python 3中,它产生一个浮点数。我们可以通过从__future__导入来获得新的行为。
__future__
>>> from __future__ import division>>> a = 4>>> b = 6>>> c = a / b>>> c0.66666666666666663
在Python 3. x中,单斜杠(/)始终表示真(非截断)除法。(//运算符用于截断除法。)在Python 2. x(2.2及更高版本)中,您可以通过将
/
//
from __future__ import division
在模块的顶部。
只要以浮点格式制作任何用于除法的参数,也会产生浮点格式的输出。
示例:
>>> 4.0/31.3333333333333333
或,
>>> 4 / 3.01.3333333333333333
>>> 4 / float(3)1.3333333333333333
>>> float(4) / 31.3333333333333333
这也将工作
>>> u=1./5>>> print u0.2
如果你想默认使用“true”(浮点)除法,有一个命令行标志:
python -Q new foo.py
有一些缺点(来自PEP):
有人认为命令行选项可以更改违约是邪恶的。在错误的情况下肯定是危险的手:例如,不可能结合第三个需要-Qnew的派对库包和另一个需要-Qold。
您可以通过查看python手册页了解有关改变/警告除法行为的其他标志值的更多信息。
有关划分更改的完整详细信息,请阅读:PEP 238-更改部门运算符
添加点(.)以指示浮点数
.
>>> 4/3.1.3333333333333333
from operator import truediv c = truediv(a, b)
如何强制除法在Python中是浮点数?我有两个整数值a和b,但我需要它们的浮点比。我知道a在下面的代码中,如何强制c成为Python中的浮点数?c = a / b
我有两个整数值a和b,但我需要它们的浮点比。我知道a
在下面的代码中,如何强制c成为Python中的浮点数?
这里真正被问到的是:
“我如何强制真正的除法,使得a / b将返回一个分数?”
在Python 3中,要获得真正的除法,只需执行a / b。
>>> 1/20.5
地板除法,整数的经典除法行为,现在是a // b:
a // b
>>> 1//20>>> 1//2.00.0
但是,您可能会被困在使用Python 2,或者您可能正在编写必须在2和3中同时工作的代码。
在Python 2中,它不是那么简单。一些处理经典Python 2除法的方法比其他方法更好、更健壮。
您可以在任何给定模块中获取Python 3除法行为,并在顶部导入以下内容:
然后将Python 3样式划分应用于整个模块。它也可以在任何给定点在python shell中工作。在Python 2中:
>>> from __future__ import division>>> 1/20.5>>> 1//20>>> 1//2.00.0
这确实是最好的解决方案,因为它确保模块中的代码与Python 3更向前兼容。
如果你不想将其应用于整个模块,你只能使用一些解决方法。最流行的是将其中一个操作数强制转换为浮点数。一个健壮的解决方案是a / (b * 1.0)。在一个新的Python shell中:
a / (b * 1.0)
>>> 1/(2 * 1.0)0.5
来自operator模块operator.truediv(a, b)的truediv也很健壮,但这可能会慢一些,因为它是一个函数调用:
operator
operator.truediv(a, b)
truediv
>>> from operator import truediv>>> truediv(1, 2)0.5
常见的是a / float(b)。如果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
故意让你的代码更脆弱对我来说没有多大意义。
你也可以使用-Qnew标志运行Python,但这有一个缺点,即使用新的Python 3行为执行所有模块,并且你的一些模块可能需要经典除法,所以除了测试之外,我不推荐这样做。但是为了演示:
-Qnew
$ python -Qnew -c 'print 1/2'0.5$ python -Qnew -c 'print 1/2j'-0.5j
其中a是股息,b是除数。当两个整数相除后的商是浮点数时,此函数很方便。