杰瑞科技汇

Python float转int如何取舍小数部分?

使用 int() 函数(直接截断)

这是最直接、最常用的方法。int() 函数会直接将浮点数的小数部分截断(丢弃),只保留整数部分。

Python float转int如何取舍小数部分?-图1
(图片来源网络,侵删)

语法:

int(浮点数)

特点:

  • 行为: 向零取整,对于正数,直接去掉小数部分;对于负数,也是直接去掉小数部分(注意,这不同于向下取整)。
  • 速度: 非常快,因为它只是简单地截断数据。
  • 场景: 当你明确地只想“丢弃”小数部分时使用,计算物品的整数个数,不考虑小数。

示例:

# 正数
f1 = 10.9
i1 = int(f1)
print(f"{f1} 转换为 int 是: {i1}")  # 输出: 10.9 转换为 int 是: 10
# 负数
f2 = -10.9
i2 = int(f2)
print(f"{f2} 转换为 int 是: {i2}")  # 输出: -10.9 转换为 int 是: -10
# 小数部分正好是 0.5
f3 = 10.5
i3 = int(f3)
print(f"{f3} 转换为 int 是: {i3}")  # 输出: 10.5 转换为 int 是: 10
# 小数部分小于 0.5
f4 = 10.2
i4 = int(f4)
print(f"{f4} 转换为 int 是: {i4}")  # 输出: 10.2 转换为 int 是: 10

使用 round() 函数(四舍五入)

round() 函数用于对浮点数进行四舍五入,然后返回一个整数。

Python float转int如何取舍小数部分?-图2
(图片来源网络,侵删)

语法:

round(浮点数)

特点:

  • 行为: 标准的四舍五入规则。
    • 如果小数部分 >= 0.5,则向取整(绝对值变大)。
    • 如果小数部分 < 0.5,则向取整(绝对值变小)。
  • 注意: Python 3 中的 round() 函数对于 .5 的情况,会舍入到最近的偶数,这被称为“银行家舍入法”或“四舍六入五成双”,这可以减少在大量计算中因系统性舍入误差带来的偏差。
  • 场景: 当你需要对数值进行标准的四舍五入处理时使用,计算平均分并保留整数。

示例:

# 小数部分 > 0.5,向上取整
f1 = 10.9
r1 = round(f1)
print(f"{f1} 四舍五入是: {r1}")  # 输出: 10.9 四舍五入是: 11
# 小数部分 < 0.5,向下取整
f2 = 10.2
r2 = round(f2)
print(f"{f2} 四舍五入是: {r2}")  # 输出: 10.2 四舍五入是: 10
# 小数部分正好是 0.5 (舍入到最近的偶数)
f3 = 10.5
r3 = round(f3)
print(f"{f3} 四舍五入是: {r3}")  # 输出: 10.5 四舍五入是: 10 (10是偶数)
f4 = 11.5
r4 = round(f4)
print(f"{f4} 四舍五入是: {r4}")  # 输出: 11.5 四舍五入是: 12 (12是偶数)
# 负数的情况同样遵循规则
f5 = -10.5
r5 = round(f5)
print(f"{f5} 四舍五入是: {r5}")  # 输出: -10.5 四舍五入是: -10 (-10是偶数)

特性 int() round()
转换规则 截断小数部分(直接丢弃) 四舍五入
对正数 10.9 的处理 10 11
对正数 10.5 的处理 10 10 (舍入到最近的偶数)
对负数 -10.9 的处理 -10 -11
对负数 -10.5 的处理 -10 -10 (舍入到最近的偶数)
主要用途 获取整数部分,忽略小数 获取最接近的整数值

⚠️ 重要注意事项:浮点数精度问题

由于计算机使用二进制存储浮点数,很多小数(如 1, 2)无法被精确表示,这会导致微小的精度误差。

示例:

# 看似是 1.0,但实际存储的值可能略小于或大于 1.0
f = 1.0000000000000001
print(f)  # 输出: 1.0
print(int(f)) # 输出: 1
# 看似是 1.0000000000000002,可能因为精度问题被存储为 1.0
f = 1.0000000000000002
print(f)  # 输出: 1.0
print(int(f)) # 输出: 1
# 一个更经典的例子
sum_val = 0.1 + 0.2
print(sum_val)  # 输出: 0.30000000000000004
print(int(sum_val)) # 输出: 0

在进行转换前,如果需要处理精度问题,可以考虑使用 decimal 模块,但大多数情况下,int()round() 的行为是符合预期的。


何时使用哪个?

  • 使用 int() 的情况:

    • 你只想获取浮点数的整数部分,不关心小数。
    • 计算一个商品能装满多少个完整的箱子(int(total_weight / box_weight))。
    • 你需要“向下取整”效果(对于正数)。
  • 使用 round() 的情况:

    • 你需要对数值进行标准的四舍五入。
    • 将学生的最终成绩(如 6)四舍五入为整数(90)。
    • 你需要统计报表,希望数据更接近其理论值。

如何选择向下取整?

虽然 int() 对正数是向下取整,但对负数不是,如果你需要真正的“向下取整”(即向负无穷方向取整),可以使用 math.floor()

import math
f1 = 10.9
f2 = -10.9
# int() 截断
print(int(f1))   # 10
print(int(f2))   # -10
# math.floor() 向下取整
print(math.floor(f1)) # 10
print(math.floor(f2)) # -11 (真正的向下取整)
你的目标 推荐函数
直接丢弃小数部分 int()
标准的四舍五入 round()
向负无穷方向取整(向下取整) math.floor()
向正无穷方向取整(向上取整) math.ceil()

希望这个详细的解释能帮助你完全理解 Python 中 floatint 的转换!

分享:
扫描分享到社交APP
上一篇
下一篇