当前位置: 首页 > 面试题库 >

Python 3 int除法运算符返回浮点数吗?

劳彦
2023-03-14
问题内容

在我的一项任务中,我遇到了一个奇怪的实现,我很好奇它是错误还是设计行为。

在Python 3中,除法/返回浮点数,//表示整数除法,应返回整数。我发现尽管在整数除法时两个值中的任何一个都是浮点数,它将返回一个浮点数。

例:

# These all work as expected
10 / 2
-> 5.0
11 / 2
-> 5.5
10 // 2
-> 5
11 // 2
-> 5
# Here things start to get weird
10.0 // 2
-> 5.0
10 // 2.0
-> 5.0
11.0 // 2
-> 5.0

应该 是这样吗?如果是这样, 为什么 会这样呢?


问题答案:

从介绍了新部门(强调我的部门)的PEP-238:

楼层划分的语义

地板分割将在所有Python数字类型中实现,并将具有以下语义:

a // b == floor(a/b)

除了结果类型将是操作之前将 ab 强制转换为的普通类型。

具体来说,如果 ab
属于同一类型,则a//b也将属于该类型。
如果输入的类型不同,则首先使用与所有其他算术运算符相同的规则将它们强制转换为公共类型。

特别是,如果 ab
均为整数或长整型,则结果的类型和值与这些类型的经典除法相同(包括混合输入类型的情况;int//long并且long//int都将返回长整型)。

对于浮点输入,结果为浮点数。 例如:

3.5//2.0 == 1.0

对于复数,//会引发一个例外,因为floor()不允许使用复数。

对于用户定义的类和扩展类型,所有语义均取决于该类或类型的实现。

是的,它应该以这种方式运行。 //表示整数除法,应该返回整数” -不完全是,它表示 底数除法, 并且应该返回 等于 整数的值((a // b).is_integer()如果两个操作数均为浮点数,则始终希望为true)。



 类似资料:
  • 我阅读关于浮点和舍入在浮点算术期间发生的错误。 我读了很多关于IEEE754单精度/双精度格式的文章。我知道有符号位、8(或)11位指数和23(或)52位有效位以及隐式前导位。 我也知道分母不是质因数2的实数不能完全表示,例如二进制中的0.1是0.0001100110011...... 我知道0.1 0.1 0.1不等于0.3,因为舍入误差的累积。 同样,0.5也可以用二进制格式表示,因为它是1/

  • 本文向大家介绍DSP中浮点转定点运算--定点数的加减乘除运算,包括了DSP中浮点转定点运算--定点数的加减乘除运算的使用技巧和注意事项,需要的朋友参考一下 3.定点数的加减乘除运算 简单的说,各种运算的原则就是先把待运算的数据放大一定的倍数,在运算的过程中使用的放大的数据,在最终需要输出结果的时候再调整回去。 举个例来说,有如下运算: 代码的意思是,该模块需要输出一个整型的结果,但计算的过程中有浮

  • 关于尾数(关于浮点运算的指南),实际上如何将两个尾数相乘? 假设IEEE 754单精度浮点表示。 假设一个数字的尾数为,将被编码为(十进制为)。第二个数字的尾数为,将被编码为(十进制为)。 <代码>1.5 x 1.125=1.6875。 编码为(十进制为)。但是不等于... 尾数乘法是如何工作的,以至于将4194304(1.5)乘以1048576(1.125),得到5767168(1.6875)?

  • 我的问题是,是否有一种方法可以在不通过堆栈的情况下完成所有这些操作。x86_64是否有将xmm0的内容复制到eax或其他通用寄存器的内插? 编辑:问题本身在讨论过程中发生了变化。最后有两个备注,在这两个备注中,我都引用了Intel C++复杂参考的相应部分。 > 可以使用intrinsics在通用Regiter和XMM寄存器之间移动数据(“Steaming SIMD Extensions->流式S

  • 问题内容: 因此,如果我有一个范围为‘0-1024’的数字,并且希望将其取为‘0-255’,那么数学将决定将输入除以输入的最大值(在这种情况下为1024),从而得出我的数字介于0.0-1.0之间。然后将其乘以目标范围(255)。 我要做什么! 但是由于Java中的某些原因(使用处理),它将始终返回值0。 该代码将像这样简单 但是我只得到0.0。我已经尝试过两次和诠释。一切都无济于事。为什么!? 问

  • 我正在开发一个返回算术表达式的程序,其中包括运算符和整数。我为其实现的代码如下: 这段代码的问题是它返回运算符,但表达式中的所有运算符都是相同的:例如:我得到一个表达式9 2 3 4 5=?我不想让它全部包含,它可以是一个表达式中的许多随机运算符。任何帮助都将不胜感激。谢谢