HOWTO · Python
在 Python 中将浮点数转换为整数
本文介绍如何在 Python 中将浮点数转换为整数
本页内容
在 Python 中将浮点数转换为整数时,如果要向零截去小数部分,请使用内置函数 int()。如果需要采用其他规则,可以使用 math.ceil(),将数值向上取到大于或等于它的最小整数;也可以使用 math.floor(),将数值向下取到小于或等于它的最大整数。标准库还提供了 math.trunc(),用于向零截断。请根据计算所需的取整行为选择函数;对于负数,这些函数的结果并不都相同。
使用 int() 将浮点数转换为整数
运行以下示例:
本节中的代码以及显示的标签或输出仍为英文。
number = 25.49
print(int(number))
25
对于正的小数值,int() 会去掉小数部分。对于负数,它同样向零截断:int(-1.5) 的结果是 -1,而不是 -2。这是截断,不是四舍五入到最接近的整数。如果需要取最接近的整数,请使用相应的舍入操作,不要假设 int() 会这样处理。
int() 可以接收浮点数、整数,以及表示整数的文本,例如 int("25")。包含小数点的文本,例如 "25.49",并不是整数形式的字符串,不能直接传给 int()。如果确实要对十进制文本进行截断,可以先将其转换为浮点数,再转换该浮点数。请留意输入类型:传入数值浮点数和传入字符串是两种不同的转换。
浮点数字面量在实际表示时,也可能与书写的十进制形式不同。例如,Python 可能会将 1.9999999999999999 表示为 2.0;此时再对这个已经表示出来的浮点数调用 int(),得到的就是 2.0 所表示的整数。int() 并没有针对 16 个或更多连续数字 9 的特殊规则。转换操作处理的是解析后实际存在的浮点数值,因此,结果接近某个整数时,浮点数表示方式和截断行为都可能影响结果。
使用 math 选择截断、向上取整或向下取整
当需要明确指定处理规则时,可以使用 math 模块。math.trunc() 向零截断;对于浮点数,它与 int() 的行为相同。math.ceil() 返回大于或等于该数值的最小整数。math.floor() 返回小于或等于该数值的最大整数。对于负数,这些区别尤其明显:-1.5 向零截断得到 -1,向下取整得到 -2,向上取整则得到 -1。对于正小数,向零截断和向下取整都会得到较小的那个整数,而向上取整会得到较大的整数。
下面的独立示例使用三个标准库函数比较正数和负数的结果。
本节中的代码以及显示的标签或输出仍为英文。
import math
for number in (1.5, -1.5):
print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2
如果要向零去掉小数部分,请使用 int() 或 math.trunc();如果结果必须不小于输入值,请使用 math.ceil();如果结果必须不大于输入值,请使用 math.floor()。例如,将测量值转换为整数单位时,应先确定应用需要保留完整单位、始终分配足够的单位,还是只计算完全包含在该测量值中的单位。在代码中明确写出所采用的规则,能让结果更容易审查,也能避免意外使用错误的取整方向。
对于常见的有限数值输入,这些函数都会返回 Python 整数,并且不会保留小数信息。如果后续计算仍需要这部分精度,请同时保留原始浮点数和转换后的整数。对于要求精确十进制运算的数量,可以在转换前考虑使用十进制表示;将已经近似表示的浮点数转换为整数,无法恢复表示过程中丢失的十进制位数。