碰到的问题: 对float进行精确两位显示出来。

解决的方法:round(3.32342,2)  #3.32  .

round函数概念:

英文:圆,四舍五入
是python内置函数,它在哪都能用,对数字取四舍五入。
round(number[, ndigits])
round 对传入的数据进行四舍五入,如果ngigits不传,默认是0(就是说保留整数部分).ngigits<0 的时候是来对整数部分进行四舍五入,返回的结果是浮点数.

round 负数

四舍五入是围绕着0来计算的,
round(0.5)            # 1.0
round(-0.5)         #-1.0

round 的陷阱

round(1.675, 2)    #1.68
round(2.675, 2)    #2.67

举例:

round(3.4)         # 3.0
round(3.5)         # 4.0 
round(3.6)         # 4.0 
round(3.6, 0)      # 4.0 
round(1.95583, 2)  # 1.96 
round(1241757, -3) # 1242000.0 
round(5.045, 2)    # 5.05 
round(5.055, 2)    # 5.06

python中关于round函数的小坑

这个一直都想写,但是因为这个点比较小,所以一直懒得动手。不过还是补上吧,留着早晚是个祸害。

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中都举了个相同的栗子,原文是这么说的:

NoteThe 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()函数。近似计算我们还有其他的选择:

  1. 使用math模块中的一些函数,比如math.ceiling(天花板除法)。
  2. python自带整除,python2中是/,3中是//,还有div函数。
  3. 字符串格式化可以做截断使用,例如 "%.2f" % value(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。
  4. 当然,对浮点数精度要求如果很高的话,请用嘚瑟馍,不对不对,请用decimal模块。

python的round函数使用相关推荐

  1. python中round函数的精度保留方法---四舍六入五成双

    当我们利用python进行数据计算时,通常会对浮点数保留相应的位数,这时候就会用到round函数,相信各位朋友在进行使用时会遇到各种问题,关于round函数保留精度.保留方法的问题,本文会进行详细的解 ...

  2. python中round函数参数_python中关于round函数的小坑

    round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...

  3. python中round函数参数有负数_Python中round函数使用注意事项

    使用round函数的时候发现了一个奇怪的现象.一直觉得round函数是一个用于四舍五入的函数,结果却不一定.一般如果觉得奇怪,那就是没弄懂其本质的运作原理,所以深入了解了下round函数. Pytho ...

  4. python中round函数的使用方法

    python中使用的语法是round(number,digits) number,要四舍五入的数,digits是要小数点后保留的位数 如果 digits 大于 0,则四舍五入到指定的小数位 如果 di ...

  5. python round_Python round() 函数

    round() 方法返回浮点数x的四舍五入值. 以下是 round() 方法的语法: round( x [, n] ) x为浮点数,n为保留的小数点位. 以下展示了使用 round() 方法的实例: ...

  6. python中round作用,python的round函数的解释

    0x01 round的疑问 简单测试round函数,有些情况会让你很疑惑. 为啥四舍五入有时候不起作用, 这涉及到的底层浮点数保存的问题.学习过逆向或者汇编的话, 都知道浮点数的精度问题. 0x02 ...

  7. 【详解python中round函数】

    在Python中,round()函数是一个内置函数,用于将一个数字四舍五入为指定的小数位数或整数位数. round()函数有两个参数:第一个参数是要四舍五入的数字,第二个参数(可选)是小数位数或整数位 ...

  8. python中round函数_round函数

    Python内置的round函数,用来取小数点后N位,还是很方便的.但是要注意,round函数执行的不是四舍五入.请参考:Python实现四舍五入的方法. 看代码吧,要注意round函数在去小数点后N ...

  9. 【问题解决】python中round()函数并非四舍五入

    对于python中的round()函数,我们简单的认为是四舍五入,其实不然 对于偶数 >>> round(4.5) 4 对于奇数 >>> round(5.5) 6 ...

最新文章

  1. JCo3 建立连接到SAP(2)- 连接池
  2. C#, ASP.NET面试题系列(1)
  3. php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
  4. php单词出现频率,PHP计算文件或数组中单词出现频率
  5. 使用组合索引你得注意了
  6. android图片选择器框架支持长图,基于RxJava的Android图片选择器. – RxPicker
  7. spring 组件扫描_避免不必要的Spring配置组件扫描
  8. [css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?
  9. 友元关系可以继承_私生子也有继承权!非婚生子女的继承关系如何认定?
  10. android常见传值
  11. 关于Axure RP
  12. 算法不会,尚能饭否之集合(Set)
  13. Vue.js 关于router传参那点事儿
  14. Win Server 2012 R2 安装SQL 2016先决条件
  15. 【脑电信号】基于matlab SVM分期睡眠监测【含Matlab源码 611期】
  16. 近红外光谱建模之区间偏最小二乘法python实现(ipls算法)
  17. 树莓派第一次使用WIN10电脑远程连接(无显示器)
  18. 搭建一个专属于两个人的爱情网站,记录生活中的点点滴滴
  19. Qt控件--QComboBox存储自定义数据
  20. 「硬核讲解」通达信跨周期引用均线指标公式

热门文章

  1. helm模板开发-流程控制、作用域、循环、变量(三)
  2. Android--耗电优化
  3. 【渝粤题库】广东开放大学 风险投资 形成性考核
  4. ajax请求存在不安全的问题有哪些?如何解决这些不安全的很问题
  5. GTD时间管理---学习笔记(一)
  6. 二维码图片如何快速生成
  7. 【小程序测试】小程序介绍,项目简介
  8. 计算机在会计中的应用书籍,Excel在会计中的应用
  9. XDMCP远程连接Linux桌面(lightdm) ps -ef |grep lightdm
  10. sRGB,RAW图像意义