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?
可以通过执行
c = a / float(b)
将其转换为float。如果分子或分母是浮点数,则结果也是。注意:正如注释者所指出的,如果
b
可能不是整数或浮点数(或表示整数或浮点数的字符串),那么这将不起作用。如果您可能正在处理其他类型(如复数),则需要检查这些类型或使用其他方法。这里真正要问的是:
“如何强制真除法,以便
a / b
返回小数?”升级至Python 3
在Python 3中,要获得真正的除法,只需执行
a / b
。整数的经典除法行为Floor division现在是
a // b
:但是,您可能无法使用Python2,或者您可能正在编写必须同时在2和3中工作的代码。
如果使用Python 2
在Python 2中,它并不是那么简单。一些处理经典Python 2分区的方法比其他方法更好、更健壮。
Python 2的建议
您可以在任何给定模块中获得Python 3除法行为,顶部有以下导入:
然后对整个模块应用Python 3样式划分。它还可以在任意给定点的python shell中工作。在Python 2中:
这确实是最好的解决方案,因为它可以确保模块中的代码与Python 3更向前兼容。
Python 2的其他选项
如果您不想将此应用于整个模块,则只能使用一些解决方法。最常用的方法是将其中一个操作数强制为浮点。一个可靠的解决方案是
a / (b * 1.0)
。在一个新的Python外壳中:同样健壮的还有来自
operator
模块operator.truediv(a, b)
的truediv
,但这可能会慢一些,因为它是一个函数调用:不推荐用于Python 2
常见的是
a / float(b)
。如果b是一个复数,这将引发TypeError。因为定义了复数除法,所以当给除数传递复数时,不让除法失败对我来说是有意义的。故意让你的代码更脆弱对我来说没有多大意义。
您还可以使用
-Qnew
标志运行Python,但这有一个缺点,即使用新的Python 3行为执行所有模块,并且您的一些模块可能需要典型的除法,所以除了测试之外,我不建议这样做。但为了证明:在Python 2中,两个int的除法产生一个int。在Python 3中,它产生一个float。我们可以通过从
__future__
导入来获得新的行为。相关问题 更多 >
编程相关推荐