我怎样才能迫使部门浮动? 司保持四舍五入到零
我有两个整数值a
和b
,但我需要他们的比例在浮点数。 我知道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
作为一个float
types
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
😉
最大 – 意大利