当前位置: 代码网 > it编程>前端脚本>Python > Python保留小数的6种常用方法

Python保留小数的6种常用方法

2026年03月18日 Python 我要评论
引言日常写 python 代码时,保留小数是高频需求 —— 比如电商系统显示订单金额(保留 2 位)、数据分析展示百分比(保留 1 位)、实验报告输出测量结果(保留 3 位)。

引言

日常写 python 代码时,保留小数是高频需求 —— 比如电商系统显示订单金额(保留 2 位)、数据分析展示百分比(保留 1 位)、实验报告输出测量结果(保留 3 位)。很多新手只会用round()函数,却不知道它有 “坑”,也不清楚不同场景该选哪种方法。

今天就给大家整理 6 种 python 保留小数的常用方法,从基础到进阶,代码示例可直接复制运行,每个方法都讲清 “怎么用、适用场景、注意事项”,新手也能秒懂!

一、先看核心需求:保留小数要解决什么问题?

举个直观例子:计算10/3得到3.3333333333333335,但我们需要:

  • 显示金额:3.33(保留 2 位);
  • 显示百分比:3.3(保留 1 位);
  • 金融计算:高精度的3.3333333333(避免精度丢失)。

不同场景对应不同方法,下面逐个拆解。

二、6 种保留小数的方法(附代码 + 解析)

方法 1:round () 函数(最基础,内置函数)

round()是 python 内置函数,语法简单:round(数字, 保留位数),核心是四舍五入,适合快速保留小数。

代码示例

# 基础用法
num = 10 / 3
print(f"原始值:{num}")  # 输出:3.3333333333333335

# 保留2位小数
print(f"保留2位:{round(num, 2)}")  # 输出:3.33
# 保留1位小数
print(f"保留1位:{round(num, 1)}")  # 输出:3.3
# 不指定位数,默认保留0位(取整)
print(f"保留0位:{round(num)}")     # 输出:3

# 特殊情况:四舍五入的“坑”(不是纯数学的四舍五入)
print(round(2.675, 2))  # 预期2.68,实际输出2.67(浮点数精度问题)

核心解析

  • 优点:内置函数,无需导入模块,代码最短;
  • 缺点:
    1. 浮点数精度问题导致结果不符合预期(如2.675保留 2 位得到2.67);
    2. 适合 “快速粗略保留”,不适合金融、金额等高精度场景;
  • 适用场景:简单的日常计算、非高精度的结果展示。

方法 2:字符串格式化(% 占位符)

%_.xf的格式(x 为保留位数),本质是格式化输出,不改变数字本身,适合 “展示结果”。

代码示例

num = 10 / 3
print(f"原始值:{num}")  # 3.3333333333333335

# 保留2位小数(%_.2f)
print("保留2位:%.2f" % num)  # 输出:3.33
# 保留3位小数(%_.3f)
print("保留3位:%.3f" % num)  # 输出:3.333
# 补零:比如1.5保留2位,自动补0
print("补零示例:%.2f" % 1.5)  # 输出:1.50

核心解析

  • 优点:格式化输出,自动补零,适合打印 / 展示结果;
  • 缺点:返回的是字符串,不是数字(无法继续计算);
  • 适用场景:终端输出、日志记录、报表展示(只看结果,不计算)。

方法 3:format () 函数(推荐,灵活)

format()是 python 官方推荐的格式化函数,语法:format(数字, '.xf'),比%占位符更灵活,支持更多格式。

代码示例

num = 10 / 3
# 基础用法:保留2位
print("保留2位:{}".format(format(num, '.2f')))  # 输出:3.33
# 简写形式(更常用)
print("保留2位(简写):{:.2f}".format(num))     # 输出:3.33
# 保留1位+补零
print("保留1位+补零:{:.1f}".format(1.5))        # 输出:1.5
# 结合其他格式(比如加千分位)
print("加千分位+保留2位:{:,.2f}".format(12345.6789))  # 输出:12,345.68

核心解析

  • 优点:灵活,支持补零、千分位、对齐等,返回字符串但格式可控;
  • 缺点:返回字符串,需转数字才能计算;
  • 适用场景:复杂的结果展示(如带单位、千分位)、报表生成。

方法 4:f-string(python3.6+,最简洁)

f-string 是 python3.6 新增的格式化方式,语法:f"{数字:.xf}",兼顾简洁和灵活,是日常开发的 “首选”。

代码示例

num = 10 / 3
# 保留2位小数
print(f"保留2位:{num:.2f}")  # 输出:3.33
# 保留3位小数
print(f"保留3位:{num:.3f}")  # 输出:3.333
# 保留1位+补零
print(f"保留1位+补零:{1.5:.1f}")  # 输出:1.5
# 结合变量(动态指定保留位数)
n = 2
print(f"动态保留{n}位:{num:.{n}f}")  # 输出:3.33

核心解析

  • 优点:语法最简洁,支持动态指定保留位数,可读性最高;
  • 缺点:返回字符串,python3.6 以下版本不支持;
  • 适用场景:python3.6 + 的所有展示场景(日常开发首选)。

方法 5:decimal 模块(高精度,适合金融 / 金额)

前面的方法都有浮点数精度问题,而decimal模块专门解决 “高精度小数计算”,适合金融、金额等对精度要求高的场景。

代码示例

from decimal import decimal, round_half_up

# 解决round(2.675, 2)的精度问题
num = decimal('2.675')  # 注意:用字符串初始化,避免浮点数精度丢失
# 保留2位小数,四舍五入
res = num.quantize(decimal('0.00'), rounding=round_half_up)
print(f"高精度保留2位:{res}")  # 输出:2.68

# 对10/3进行高精度保留
num2 = decimal('10') / decimal('3')
res2 = num2.quantize(decimal('0.0000'))  # 保留4位
print(f"10/3保留4位:{res2}")  # 输出:3.3333

核心解析

  • 优点:高精度,完全符合数学上的四舍五入,无精度丢失;
  • 缺点:需要导入模块,语法稍复杂;
  • 适用场景:金融计算、金额结算、税 务计算(高精度要求)。

方法 6:numpy.round(大数据 / 数组场景)

如果处理的是 numpy 数组(数据分析、机器学习常用),用numpy.round()更高效,支持对整个数组保留小数。

代码示例

import numpy as np

# 生成numpy数组
arr = np.array([10/3, 2.675, 1.5])
print(f"原始数组:{arr}")  # 输出:[3.33333333 2.675      1.5       ]

# 对整个数组保留2位小数
arr_round = np.round(arr, 2)
print(f"保留2位后的数组:{arr_round}")  # 输出:[3.33 2.68 1.5 ]

核心解析

  • 优点:专为 numpy 数组设计,批量处理效率高;
  • 缺点:需要安装 numpy 库(pip install numpy);
  • 适用场景:数据分析、机器学习(处理大量数值数组)。

三、新手必避坑指南(重点!)

坑 1:浮点数本身的精度问题

# 看似2.675,实际存储的是近似值
print(2.675)  # 输出:2.6749999999999998

这就是round(2.675, 2)得到2.67的原因 —— 浮点数在计算机中是二进制存储,部分十进制小数无法精确表示。

坑 2:round () 的 “四舍六入五成双”

python 的round()不是纯数学的四舍五入,而是 “四舍六入五成双”(银行家舍入):

  • 当保留位后一位是 5,且后面无数字时,保留位为偶数则舍去,奇数则进 1;
  • 示例:round(1.5)=2,round(2.5)=2(5 后面无数字,保留位 0 是偶数,舍去)。

坑 3:字符串格式返回的是字符串,不是数字

res = "%.2f" % 10/3  # 错误:字符串不能直接除法
# 正确做法:转成浮点数
res = float("%.2f" % (10/3))
print(res + 1)  # 输出:4.33

四、不同场景该选哪种方法?(总结表)

方法优点缺点适用场景
round()内置函数,简洁精度问题、四舍五入坑简单计算、非高精度展示
% 占位符自动补零,适合展示返回字符串终端输出、简单报表
format()灵活,支持多格式返回字符串复杂展示(千分位、对齐)
f-string最简洁,支持动态位数python3.6+、返回字符串python3.6 + 的日常展示(首选)
decimal 模块高精度,无精度丢失语法稍复杂金融、金额、高精度计算
numpy.round批量处理数组高效需安装 numpy数据分析、机器学习(数组处理)

五、总结(新手速记)

  1. 日常展示(python3.6+):优先用f-string{num:.2f}),简洁又灵活;
  2. 高精度计算(金融 / 金额):用decimal模块,避免精度丢失;
  3. numpy 数组处理:用numpy.round()
  4. 简单粗略保留:用round(),但注意它的四舍五入规则;
  5. 所有字符串格式方法:如需计算,记得用float()转成数字。

建议大家把文中的代码逐个运行一遍,改改保留位数、换几个数字,就能快速掌握不同方法的差异。保留小数看似简单,选对方法能避免很多隐藏问题,尤其是金融场景,千万别只用round()哦!

以上就是python保留小数的6种常用方法的详细内容,更多关于python保留小数方法的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com