Nat*_*man 703 python floating-point integer division python-2.x
我有两个整数值a和b,但我需要他们的浮点比例.我知道a < b并且我想要计算a / b,所以如果我使用整数除法,我将总是得到0,余数为a.
我如何c在Python中强制成为Python中的浮点数?
c = a / b
Run Code Online (Sandbox Code Playgroud)
Mic*_*ley 788
>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
Run Code Online (Sandbox Code Playgroud)
Ste*_*out 710
你可以通过这样做来施展c = a / float(b).如果分子或分母是浮点数,那么结果也是.
需要注意的是:正如评论者指出的那样,如果b可能是整数或浮点数(或表示一个字符串的字符串)以外的其他内容,则无效.如果您可能正在处理其他类型(例如复数),则需要检查这些类型或使用其他方法.
Aar*_*all 189
如何在Python中强制除法成为浮点?
我有两个整数值a和b,但我需要它们的浮点比率.我知道a <b我想计算a/b,所以如果我使用整数除法,我将总是得到0,余数为a.
我怎样才能在下面强制c成为Python中的浮点数?
Run Code Online (Sandbox Code Playgroud)c = a / b
这里真正要问的是:
"我如何强制真正的分裂,以便a / b返回一小部分?"
在Python 3中,为了得到真正的除法,你就是这么做的a / b.
>>> 1/2
0.5
Run Code Online (Sandbox Code Playgroud)
Floor division,整数的经典除法行为,现在是a // b:
>>> 1//2
0
>>> 1//2.0
0.0
Run Code Online (Sandbox Code Playgroud)
但是,您可能会遇到使用Python 2的问题,或者您可能正在编写必须同时适用于2和3的代码.
在Python 2中,它并不那么简单.处理经典Python 2分区的一些方法比其他方法更好,更健壮.
您可以在任何给定模块中获得Python 3除法行为,顶部有以下导入:
from __future__ import division
Run Code Online (Sandbox Code Playgroud)
然后将Python 3样式分区应用于整个模块.它也适用于任何给定点的python shell.在Python 2中:
>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0
Run Code Online (Sandbox Code Playgroud)
这确实是最好的解决方案,因为它可以确保模块中的代码与Python 3更加向前兼容.
如果您不想将其应用于整个模块,则仅限于一些解决方法.最受欢迎的是将其中一个操作数强制转换为浮点数.一个强大的解决方案a / (b * 1.0).在一个新的Python shell中:
>>> 1/(2 * 1.0)
0.5
Run Code Online (Sandbox Code Playgroud)
同样强大的是truediv来自operator模块operator.truediv(a, b),但这可能更慢,因为它是一个函数调用:
>>> from operator import truediv
>>> truediv(1, 2)
0.5
Run Code Online (Sandbox Code Playgroud)
常见的是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
Run Code Online (Sandbox Code Playgroud)
故意让你的代码变得更脆弱对我来说没有多大意义.
您也可以使用-Qnew标志运行Python ,但是这具有使用新的Python 3行为执行所有模块的缺点,并且您的一些模块可能期望经典除法,因此除了测试之外我不建议这样做.但要证明:
$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
Run Code Online (Sandbox Code Playgroud)
new*_*cct 66
在Python 3.x中,单斜杠(/)总是表示真(非截断)除法.(该//运算符用于截断除法.)在Python 2.x(2.2及更高版本)中,您可以通过放置一个
from __future__ import division
Run Code Online (Sandbox Code Playgroud)
在您的模块的顶部.
gsb*_*bil 30
只使用浮点格式进行除法的任何参数也会产生浮点输出.
例:
>>> 4.0/3
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
要么,
>>> 4 / 3.0
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
要么,
>>> 4 / float(3)
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
要么,
>>> float(4) / 3
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 20
添加一个点(.)以指示浮点数
>>> 4/3.
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
要么
>>> 4/3.
1.3333333333333333
Run Code Online (Sandbox Code Playgroud)
Gau*_*wal 12
这也行
>>> u=1./5
>>> print u
0.2
Run Code Online (Sandbox Code Playgroud)
0.2
如果要在默认情况下使用"true"(浮点)除法,则有一个命令行标志:
python -Q new foo.py
Run Code Online (Sandbox Code Playgroud)
有一些缺点(来自PEP):
有人认为,更改默认值的命令行选项是邪恶的.在错误的人手中肯定是危险的:例如,将第三方库包需要-Qnew和另一个需要-Qold的库组合在一起是不可能的.
通过查看python手册页,您可以了解有关更改/警告除法行为的其他标志值的更多信息.
有关除法更改的完整详细信息,请参阅:PEP 238 - 更改除法运算符
| 归档时间: |
|
| 查看次数: |
632298 次 |
| 最近记录: |