python round()函数保留小数位数的详细用法及round函数的坑

简介: python round()函数保留小数位数的详细用法及round函数的坑

round(number[, ndigits])

返回number舍入到小数点后ndigits为精度的值,如果ndigits被省略则会返回最接近输入值的整数


强调:round()的舍入规则不是四舍五入

强调:round()的舍入规则不是四舍五入

强调:round()的舍入规则不是四舍五入


舍入的规则


官方定义:结果值会舍入至最接近的 10 的负 ndigits 次幂的倍数;如果与两个倍数同样接近,则选用偶数。

有点不好理解,换一种理解方式

结果值 = 与number 最接近的拥有ndigits位小数的小数 。如果距离相等,则选择小数点第ndigits位是偶数的小数


如果不填ndigits 则保留整数部分 当出现距离相等的情况,则看整数末尾,最后结果靠近整数末尾是偶数的

round(number)

number在[1.5,2.5] 的值结果为2 1.5距离1和距离2相等,2是偶数所以结果是2,2.5距离2和距离3相等,2是偶数所以结果是2

number在 (2.5,3.5) 的值结果为3 在这个范围中的距离3最近所以结果为3

number=3.5 保留结果为4(3.5距离3和距离4都为0.5 因为4是偶数,所以最后的结果是4)


7227acef57dc4f39862dd5a0e56a4304.png


  • 特别注意:round(0.5) 和 round(-0.5) 均得出 0
  • 如果有指定的ndigit值,则会保留对应的小数位方法和整数的相同
  • 结果值等于和原值小数最接近的拥有ndigits位小数的值,如果距离相等选择小数点第ndigits位是偶数的值
a = 2.465 # 舍入后 2.46     # 距离2.46和2.47一样近,2.46的末尾小数为偶数,则结果为2.46
b = 2.4651  # 舍入后 2.47   # 距离2.47较近
print(round(a,2))
print(round(b,2))
a = 2.464 # 舍入后 2.46   # 距离2.46最近
b = 2.467  # 舍入后 2.47  # 距离2,47最近
print(round(a,2))
print(round(b,2))

round()函数的坑


官方文档的例子


对浮点数执行 round() 的行为可能会令人惊讶:例如,round(2.675, 2) 将给出 2.67 而不是期望的 2.68。

这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。


因为所有的数据在计算机中都以二进制的形式进行存储,从十进制转化为二进制的过成中,会有精度的损失。

2.675转换成二进制以后在计算机存储的机器数要小于2.675 所以会导致结果和预期值不一样


如果想要精确度比较高的


使用模块 decimal

decimal可以调整小数点位数的进度


format函数转换成字符串,可以指定保留小数位数,保留规则为四舍五入


相关文章
|
28天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
29天前
|
存储 数据安全/隐私保护 索引
|
18天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
20天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
23天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
27 4
|
24天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
18 1
|
24天前
|
安全 数据处理 数据安全/隐私保护
python中mod函数怎么用
通过这些实例,我们不仅掌握了Python中 `%`运算符的基础用法,还领略了它在解决实际问题中的灵活性和实用性。在诸如云计算服务提供商的技术栈中,类似的数学运算逻辑常被应用于数据处理、安全加密等关键领域,凸显了基础运算符在复杂系统中的不可或缺性。
17 0
一分钟看懂Python中的 // 和 / 和 % 的用法区别
一分钟看懂Python中的 // 和 / 和 % 的用法区别
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。