如何强制除法为浮点数? 除数一直舍入到0?

在Python中,强制整数除法为浮点数可以通过将其中一个操作数转换为浮点数来实现。在Python 3中,除法运算符 `/` 默认执行浮点数除法。而在Python 2中,可以使用 `from __future__ import division` 导入语句或直接将操作数转换为浮点数。此外,使用 `float(a) / b` 或 `a / float(b)` 也能确保结果为浮点数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下面如何在Python中强制c为浮点数?

c = a / b

#1楼

c = a / (b * 1.0)

#2楼

您可以通过执行c = a / float(b)来强制转换为float。 如果分子或分母是浮点数,则结果也将是。


注意事项:如评论者所指出的,如果b可能不是整数或浮点数(或表示一个的字符串),则这将无效。 如果您要处理其他类型(例如复数),则需要检查这些类型或使用其他方法。


#3楼

在Python 2中,两个整数的除法产生一个整数。 在Python 3中,它产生一个浮点数。 我们可以通过从__future__导入来获得新的行为。

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

#4楼

在Python 3.x中,单斜杠( / )始终表示真实(非截断)除法。 ( //操作符用于截断除法。)在Python 2.x(2.2及更高版本)中,您可以通过将

from __future__ import division

在模块顶部。


#5楼

这也可以

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

#6楼

如果要默认使用“ true”(浮点数)除法,则有一个命令行标志:

python -Q new foo.py

有一些缺点(来自PEP):

有人认为,更改默认值的命令行选项是有害的。 如果使用不当,肯定会很危险:例如,不可能将需要-Qnew的第三方库软件包与需要-Qold的第三方库软件包组合在一起。

您可以通过查看python手册页了解有关更改/警告除法行为的其他标志值的更多信息。

有关除法更改的详细信息,请阅读: PEP 238-更改除法运算符


#7楼

添加一个点( . )以表示浮点数

>>> 4/3.
1.3333333333333333

#8楼

from operator import truediv

c = truediv(a, b)

#9楼

如何在Python中强制除法为浮点数?

我有两个整数值a和b,但是我需要它们在浮点数中的比率。 我知道a <b并且我想计算a / b,所以如果我使用整数除法,我总是得到0并得到a的余数。

下面如何在Python中强制c为浮点数?

 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 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向前兼容。

Python 2的其他选项

如果您不想将其应用于整个模块,则只能使用一些解决方法。 最受欢迎的是将其中一个操作数强制为浮点数。 一种可靠的解决方案是a / (b * 1.0) 。 在新的Python Shell中:

>>> 1/(2 * 1.0)
0.5

operator模块operator.truediv(a, b) truediv也很健壮,但这可能会更慢,因为它是一个函数调用:

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

不建议用于Python 2

常见的是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行为的所有模块,并且您的某些模块可能需要经典的划分,因此除测试外,我不建议这样做。 但要演示:

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

#10楼

from operator import truediv

c = truediv(a, b)

其中a是除数,b是除数。 当两个整数相除后的商是浮点数时,此函数非常方便。


#11楼

仅以浮点格式进行除法的任何参数也会产生浮点输出。

例:

>>> 4.0/3
1.3333333333333333

要么,

>>> 4 / 3.0
1.3333333333333333

要么,

>>> 4 / float(3)
1.3333333333333333

要么,

>>> float(4) / 3
1.3333333333333333
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值