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

 更新时间:2026年03月18日 09:29:45   作者:超人小子  
日常写 Python 代码时,保留小数是高频需求,很多新手只会用round()函数,却不知道它有 坑,也不清楚不同场景该选哪种方法,今天就给大家整理 6 种 Python 保留小数的常用方法,从基础到进阶,代码示例可直接复制运行,需要的朋友可以参考下

引言

日常写 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保留小数方法的资料请关注脚本之家其它相关文章!

相关文章

  • Python Opencv轮廓常用操作代码实例解析

    Python Opencv轮廓常用操作代码实例解析

    这篇文章主要介绍了Python Opencv轮廓常用操作代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python多进程实现进程间通信实例

    python多进程实现进程间通信实例

    这篇文章主要介绍了python多进程实现进程间通信实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 利用For循环遍历Python字典的三种方法实例

    利用For循环遍历Python字典的三种方法实例

    字典由多个键和其对应的值构成的键—值对组成,键和值中间以冒号:隔开,项之间用逗号隔开,整个字典是由大括号{}括起来的,下面这篇文章主要给大家介绍了关于如何利用For循环遍历Python字典的三种方法,需要的朋友可以参考下
    2022-03-03
  • 详解python 注释、变量、类型

    详解python 注释、变量、类型

    本文通过实例代码较详细的给大家介绍了python 注释、变量、类型的相关操作及实现代码,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • 详解python的网络编程基础

    详解python的网络编程基础

    这篇文章主要为大家介绍了python网络编程的基础,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python使用jpype的踩坑记录

    Python使用jpype的踩坑记录

    Pype是一个能够让 python 代码方便地调用 Java 代码的工具,这篇文章主要来和大家分享一下Python使用jpype会踩的一些坑,希望对大家有所帮助
    2023-06-06
  • Python守护进程和脚本单例运行详解

    Python守护进程和脚本单例运行详解

    本篇文章主要介绍了Python守护进程和脚本单例运行,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • python可视化爬虫界面之天气查询

    python可视化爬虫界面之天气查询

    这篇文章主要介绍了python可视化爬虫界面之天气查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 踩坑:pytorch中eval模式下结果远差于train模式介绍

    踩坑:pytorch中eval模式下结果远差于train模式介绍

    这篇文章主要介绍了踩坑:pytorch中eval模式下结果远差于train模式介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 使用python删除nginx缓存文件示例(python文件操作)

    使用python删除nginx缓存文件示例(python文件操作)

    这篇文章主要介绍了使用python删除nginx缓存文件示例(python文件操作),需要的朋友可以参考下
    2014-03-03

最新评论