我有两个整数值 a 和 b ,但我需要它们的浮点比率 . 我知道 a < b 并且我想计算 a / b ,所以如果我使用整数除法,我将总是得到0,余数为 a .
a
b
a < b
a / b
我如何在下面强制 c 成为Python中的浮点数?
c
c = a / b
>>> from __future__ import division >>> a = 4 >>> b = 6 >>> c = a / b >>> c 0.66666666666666663
from operator import truediv c = truediv(a, b)
这也有效
>>> u=1./5 >>> print u
0.2
你可以通过 c = a / float(b) 强制转换为浮动 . 如果分子或分母是浮点数,那么结果也是 .
c = a / float(b)
警告:正如评论者指出的那样,如果 b 可能不是整数或浮点数(或表示一个的字符串),则不起作用 . 如果您可能正在处理其他类型(例如复数),则需要检查这些类型或使用其他方法 .
如果要在默认情况下使用“true”(浮点)除法,则有一个命令行标志:
python -Q new foo.py
有一些缺点(来自PEP):
有人认为,更改默认值的命令行选项是邪恶的 . 在错误的人手中肯定是危险的:例如,将需要-Qnew的第三方库包与另一个需要-Qold的库组合在一起是不可能的 .
您可以通过查看python手册页了解有关更改/警告分区行为的其他标志值的更多信息 .
有关部门更改的完整详细信息,请阅读:PEP 238 -- Changing the Division Operator
添加一个点( . )以指示浮点数
.
>>> 4/3. 1.3333333333333333
要么
>>> from __future__ import division >>> 4/3 1.3333333333333333
如果你进行两个整数的除法,python会返回一个整数,那么你需要这样做:
c = float(a)/b
c = a/float(b)
然后将 c 作为 float 类型
float
其中a是被除数,b是除数 . 当两个整数除法后的商是一个浮点数时,这个函数很方便 .
如何在Python中强制除法成为浮点?我有两个整数值a和b,但我需要它们的浮点比率 . 我知道a <b并且我想计算a / b,所以如果我使用整数除法,我将总是得到0,余数为a . 我怎样才能在下面强制c成为Python中的浮点数? c = a / b
这里真正要问的是:
“我如何强制真正的分裂,以便 a / b 将返回一个分数?”
在Python 3中,要获得真正的除法,您只需执行 a / b .
>>> 1/2 0.5
Floor division,整数的经典除法行为,现在 a // b :
a // b
>>> 1//2 0 >>> 1//2.0 0.0
但是,您可能会遇到使用Python 2的问题,或者您可能正在编写必须同时适用于2和3的代码 .
在Python 2中,它并不那么简单 . 处理经典Python 2分区的一些方法比其他方法更好,更健壮 .
您可以在任何给定模块中获得Python 3除法行为,并在顶部输入以下内容:
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
这确实是最好的解决方案,因为它可以确保模块中的代码与Python 3更加向前兼容 .
如果你没有't want to apply this to the entire module, you'限于几个解决方法 . 最受欢迎的是将其中一个操作数强制转换为浮点数 . 一个强大的解决方案是 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
在Python 3.x中,单斜杠( / )始终表示真(非截断)除法 . ( // 运算符用于截断除法 . )在Python 2.x(2.2及更高版本)中,您可以通过放置一个
/
//
在您的模块的顶部 .
这也将起作用u = 1. / 5 print u 0.2回答于2013年12月24日19:58 Gaurav Agarwal 6,7172279140
感谢Gauraw,这就是诀窍而且是一个非常简洁的解决方案 . 如果分子和分母都是变量,则“解”可能乘以商1 .
例:
aa = 2 bb = 3 aa / bb = 0 1. * aa / bb = 0.6666666666666666
;-)
马克斯 - 意大利
只需使用浮点格式进行除法的任何参数也会产生输出浮点 .
>>> 4.0/3 1.3333333333333333
要么,
>>> 4 / 3.0 1.3333333333333333
>>> 4 / float(3) 1.3333333333333333
>>> float(4) / 3 1.3333333333333333
c = a / (b * 1.0)
13 回答
这也有效
你可以通过
c = a / float(b)
强制转换为浮动 . 如果分子或分母是浮点数,那么结果也是 .警告:正如评论者指出的那样,如果
b
可能不是整数或浮点数(或表示一个的字符串),则不起作用 . 如果您可能正在处理其他类型(例如复数),则需要检查这些类型或使用其他方法 .如果要在默认情况下使用“true”(浮点)除法,则有一个命令行标志:
有一些缺点(来自PEP):
您可以通过查看python手册页了解有关更改/警告分区行为的其他标志值的更多信息 .
有关部门更改的完整详细信息,请阅读:PEP 238 -- Changing the Division Operator
添加一个点(
.
)以指示浮点数要么
如果你进行两个整数的除法,python会返回一个整数,那么你需要这样做:
要么
然后将
c
作为float
类型其中a是被除数,b是除数 . 当两个整数除法后的商是一个浮点数时,这个函数很方便 .
这里真正要问的是:
“我如何强制真正的分裂,以便
a / b
将返回一个分数?”升级到Python 3
在Python 3中,要获得真正的除法,您只需执行
a / b
.Floor division,整数的经典除法行为,现在
a // b
:但是,您可能会遇到使用Python 2的问题,或者您可能正在编写必须同时适用于2和3的代码 .
如果使用Python 2
在Python 2中,它并不那么简单 . 处理经典Python 2分区的一些方法比其他方法更好,更健壮 .
推荐Python 2
您可以在任何给定模块中获得Python 3除法行为,并在顶部输入以下内容:
然后将Python 3样式分区应用于整个模块 . 它也适用于任何给定点的python shell . 在Python 2中:
这确实是最好的解决方案,因为它可以确保模块中的代码与Python 3更加向前兼容 .
Python 2的其他选项
如果你没有't want to apply this to the entire module, you'限于几个解决方法 . 最受欢迎的是将其中一个操作数强制转换为浮点数 . 一个强大的解决方案是
a / (b * 1.0)
. 在一个新的Python shell中:来自
operator
模块operator.truediv(a, b)
的truediv
也很健壮,但这可能更慢,因为它是一个函数调用:不推荐用于Python 2
常见的是
a / float(b)
. 如果b是复数,这将引发TypeError . 由于定义了复数的除法,因此在为除数传递复数时,没有除法失败是有道理的 .故意让你的代码变得更脆弱对我来说没有多大意义 .
您也可以使用
-Qnew
标志运行Python,但这有使用新的Python 3行为执行所有模块的缺点,并且您的某些模块可能需要经典除法,因此除了测试之外我不建议这样做 . 但要证明:在Python 3.x中,单斜杠(
/
)始终表示真(非截断)除法 . (//
运算符用于截断除法 . )在Python 2.x(2.2及更高版本)中,您可以通过放置一个在您的模块的顶部 .
感谢Gauraw,这就是诀窍而且是一个非常简洁的解决方案 . 如果分子和分母都是变量,则“解”可能乘以商1 .
例:
;-)
马克斯 - 意大利
只需使用浮点格式进行除法的任何参数也会产生输出浮点 .
例:
要么,
要么,
要么,