round函数很简单,对浮点数进行近似取值,保留几位小数。比如

>>> round(10.0/3, 2)

3.33

>>> round(20/7)

3

第一个参数是一个浮点数,第二个参数是保留的小数位数,可选,如果不写的话默认保留到整数。

这么简单的函数,能有什么坑呢?

1、round的结果跟python版本有关

我们来看看python2和python3中有什么不同:

$ python

Python 2.7.8 (default, Jun 18 2015, 18:54:19)

[GCC 4.9.1] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> round(0.5)

1.0

$ python3

Python 3.4.3 (default, Oct 14 2015, 20:28:29)

[GCC 4.8.4] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> round(0.5)

如果我们阅读一下python的文档,里面是这么写的:

在python2.7的doc中,round()的最后写着,“Values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done away from 0.” 保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。

但是到了python3.5的doc中,文档变成了“values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice.” 如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

所以如果有项目是从py2迁移到py3的,可要注意一下round的地方(当然,还要注意/和//,还有print,还有一些比较另类的库)。

2、特殊数字round出来的结果可能未必是想要的。

>>> round(2.675, 2)

2.67

python2和python3的doc中都举了个相同的栗子,原文是这么说的:Note

The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected

2.68. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a

float. See Floating Point Arithmetic: Issues and Limitations for more information.

简单的说就是,round(2.675, 2) 的结果,不论我们从python2还是3来看,结果都应该是2.68的,结果它偏偏是2.67,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。

以上。除非对精确度没什么要求,否则尽量避开用round()函数。近似计算我们还有其他的选择:

使用math模块中的一些函数,比如math.ceiling(天花板除法)。

python自带整除,python2中是/,3中是//,还有div函数。

字符串格式化可以做截断使用,例如 "%.2f" % value(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。

当然,对浮点数精度要求如果很高的话,请用嘚瑟馍,不对不对,请用decimal模块。

内容扩展:

round(number,num_digits)

Number 需要进行四舍五入的数字。

Num_digits 指定的位数,按此位数进行四舍五入。

注解如果 num_digits 大于 0,则四舍五入到指定的小数位。

如果 num_digits 等于 0,则四舍五入到最接近的整数。

如果 num_digits 小于 0,则在小数点左侧进行四舍五入。

示例

x=1.343671234

print x

print round(x,1)

print round(x,2)

print round(x,3)

输出结果为:1.343671234

1.3

1.34

1.344

到此这篇关于python中round函数如何使用的文章就介绍到这了,更多相关python的round函数用法总结内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

python中round的用法_python中round函数如何使用相关推荐

  1. python 字典定义日志用法_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

  2. python中print的用法_Python中print函数简单使用总结

    Python中print函数简单使用总结 print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法. 打开电脑,选择python软件,下面选择pyth ...

  3. python中lambda()的用法_python中lambda()的用法

    在C++11和C#中都有匿名函数的存在.下面看看在python中匿名函数的使用. 1.lambda只是一个表达式,函数体比def简单很多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能 ...

  4. [转载] python里字典的用法_python中字典(Dictionary)用法实例详解

    参考链接: Python字典dictionary copy方法 本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映 ...

  5. python中replace的用法_python中replace的用法是什么?

    python中replace的用法是什么? Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次. r ...

  6. python中random模块用法_Python中random模块用法实例分析

    本文实例讲述了Python中random模块用法.分享给大家供大家参考.具体如下: import random x = random.randint(1,4); y = random.choice([ ...

  7. python中strip的用法_Python中你不知道的strip()函数的妙用

    [开胃小菜] 当提到python中strip方法,想必凡接触过python的同行都知道它主要用来切除空格.有以下两种方法来实现. 方法一:用内置函数if name == 'main' : str = ...

  8. python中choice的用法_Python中choice用法与三元操作

    今天随手写了一个随机答案生成器,用到了random模块的choice和三元运算符.以下是代码部分: import sys; import random; num = 3; if len(sys.arg ...

  9. python中finally的用法_python中的finally用法

    来源:强哥  公众号:Python与数据分析   链接:https://mp.weixin.qq.com/s/6jBvyl1YoVBRyVQCdC67Sg 无论try语句中是否抛出异常,finally ...

  10. python中array的用法_Python中的numpy.array()用法

    齐次多维数组是NumPy的主要对象.它基本上是一个元素表, 这些元素都是相同类型的, 并由一个正整数元组索引.尺寸在NumPy中称为轴. NumPy的数组类称为ndarray或别名数组. numpy. ...

最新文章

  1. SharePoint Server 2007 Web内容管理中的几个关键概念
  2. linux 判断网卡类型 有线 无线
  3. 【plt显示Tensor转出来的array时的报错】TypeError: Invalid dimensions for image data
  4. 徐波 博士 计算机,徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术...
  5. python日志输出 超量 停止_linux 内存分配参数导致的 buffer_pool 分配不出来的问题排查...
  6. php注入教程,php注入点构造代码实例详解
  7. javascript一些底层方法总结及用法
  8. 计算机应用操作题word,计算机应用基础网考模拟练习题Word部分操作题
  9. SQL计算两个日期之间的工作天数
  10. Kompose: Docker-compose 到 Kubernetes 的迁移工具
  11. fluent并行 linux_fluent并行计算命令
  12. Python数据分析与机器学习27-拼写纠正实例
  13. Aspose.Cells企业案例:Setec 为物联网传感器和能源节约和消耗生成自动内部报告
  14. (ACWing yxc算法基础课)习题课1.1
  15. 解读全球十大公司物联网战略,一个万物智能的世界即将到来
  16. CSS小技巧之替换图片(content)
  17. 项目管理标准(PMBOK第七版-中文)
  18. 比亚迪太牛了,下午一点投简历,一点十五打电话来面试,简单聊聊就说面试通过,准备谈薪,干脆得吓人!...
  19. 独立闭合环java实现_水准网独立最小闭合环、最短附合线生成算法
  20. 用Yolact模型训练自己的数据集

热门文章

  1. recv函数返回值总结
  2. 美国国家安全局(NSA)网络攻击主战武器“验证器”
  3. 华为研发机试题目集合整理
  4. 广州坐标系转换大地2000_就是这样操作!从地方坐标系到2000国家大地坐标系的转换...
  5. Excel小技巧之:如何在表格内插入水印
  6. java连连看怎么加音效,怎么给视频配音,添加音效与BGM都教给你
  7. 摄像头视频直播方案比较之方案一:萤石云
  8. centos7安装打印机 cups页面管理 java程序驱动打印程序
  9. 静态库和动态库的区别
  10. linux服务器密码策略设置:登录密码错误次数限制