我怎样才能迫使部门浮动? 司保持四舍五入到零

我有两个整数值ab ,但我需要他们的比例在浮点数。 我知道a<b和我想要计算a/b ,所以如果我使用整数除法,我将总是得到0剩下的a

我如何强制c在Python中成为浮点数字?

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

你可以通过执行c = a / float(b) 。 如果分子或分母是一个浮点数,那么结果也是。


需要注意的是,正如评论者所指出的,如果b可能不是整数或浮点数(或代表一个的string),那么这将不起作用。 如果您可能正在处理其他types(如复数),则需要检查这些types或使用其他方法。

 c = a / (b * 1.0) 

我如何强制部门在Python的浮点?

我有两个整数值a和b,但我需要他们的比例在浮点数。 我知道一个<b和我想要计算a / b,所以如果我使用整数除法,我将总是得到0剩下的一个。

我如何强制c在Python中成为浮点数字?

 c = a / b 

真正被问到的是:

“我如何强制真正的分裂,使a / b将返回一小部分?”

升级到Python 3

在Python 3中,为了得到真正的分区,你只需要做a / b

 >>> 1/2 0.5 

整数的经典划分行为,现在a // b

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

然而,你可能会被困在Python 2中,或者你可能正在编写必须在2和3中工作的代码。

如果使用Python 2

在Python 2中,并不是那么简单。 处理经典的Python 2部分的一些方法比其他方法更好,更强大。

推荐的

您可以在任何给定的模块中获得Python 3的划分行为,并在顶部input以下内容:

 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 

这确实是最好的解决scheme,因为它确保模块中的代码与Python 3更加兼容。

其他选项

如果您不希望将其应用于整个模块,则仅限于一些解决方法。 最stream行的是强制其中一个操作数浮动。 一个强大的解决scheme是a / (b * 1.0) 。 在一个新鲜的Python shell中:

 >>> 1/(2 * 1.0) 0.5 

truediv来自operator.truediv(a, b) truediv ,但是这可能会比较慢,因为它是一个函数调用:

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

不build议

常见的是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行为的所有模块,并且你的某些模块可能需要经典的划分,所以不build议这样做。 但是要certificate:

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

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

 from __future__ import division 

在你的模块的顶部。

只要将任何用于浮点格式的除法参数也生成浮点输出。

例:

 >>> 4.0/3 1.3333333333333333 

要么,

 >>> 4 / 3.0 1.3333333333333333 

要么,

 >>> 4 / float(3) 1.3333333333333333 

要么,

 >>> float(4) / 3 1.3333333333333333 

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

 >>> 4/3. 1.3333333333333333 

要么

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

这也将起作用

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

0.2

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

 python -Q new foo.py 

有一些缺点(来自PEP):

有人认为,改变默认值的命令行选项是邪恶的。 当然,这可能是危险的,例如,将一个需要-Qnew的第三方库包与另一个需要-Qold的库包结合起来是不可能的。

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

有关部门更改的全部细节,请阅读: PEP 238 – 更改部门操作员

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

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

 c = float(a)/b 

要么

 c = a/float(b) 

然后把c作为一个floattypes

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

a是红利,b是除数。 当两个整数除以后的商是一个浮点数时,这个函数很方便。

这也将起作用

你= 1/5打印你

 0.2 

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

感谢Gauraw,这个技巧并且是一个相当整洁的解决scheme。 在分子和分母都是variables的情况下,“解”可能乘以商数。

例:

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

😉

最大 – 意大利