python的round函数使用
碰到的问题: 对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()函数。近似计算我们还有其他的选择:
- 使用math模块中的一些函数,比如math.ceiling(天花板除法)。
- python自带整除,python2中是/,3中是//,还有div函数。
- 字符串格式化可以做截断使用,例如 "%.2f" % value(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。
- 当然,对浮点数精度要求如果很高的话,请用嘚瑟馍,不对不对,请用decimal模块。
python的round函数使用相关推荐
- python中round函数的精度保留方法---四舍六入五成双
当我们利用python进行数据计算时,通常会对浮点数保留相应的位数,这时候就会用到round函数,相信各位朋友在进行使用时会遇到各种问题,关于round函数保留精度.保留方法的问题,本文会进行详细的解 ...
- python中round函数参数_python中关于round函数的小坑
round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...
- python中round函数参数有负数_Python中round函数使用注意事项
使用round函数的时候发现了一个奇怪的现象.一直觉得round函数是一个用于四舍五入的函数,结果却不一定.一般如果觉得奇怪,那就是没弄懂其本质的运作原理,所以深入了解了下round函数. Pytho ...
- python中round函数的使用方法
python中使用的语法是round(number,digits) number,要四舍五入的数,digits是要小数点后保留的位数 如果 digits 大于 0,则四舍五入到指定的小数位 如果 di ...
- python round_Python round() 函数
round() 方法返回浮点数x的四舍五入值. 以下是 round() 方法的语法: round( x [, n] ) x为浮点数,n为保留的小数点位. 以下展示了使用 round() 方法的实例: ...
- python中round作用,python的round函数的解释
0x01 round的疑问 简单测试round函数,有些情况会让你很疑惑. 为啥四舍五入有时候不起作用, 这涉及到的底层浮点数保存的问题.学习过逆向或者汇编的话, 都知道浮点数的精度问题. 0x02 ...
- 【详解python中round函数】
在Python中,round()函数是一个内置函数,用于将一个数字四舍五入为指定的小数位数或整数位数. round()函数有两个参数:第一个参数是要四舍五入的数字,第二个参数(可选)是小数位数或整数位 ...
- python中round函数_round函数
Python内置的round函数,用来取小数点后N位,还是很方便的.但是要注意,round函数执行的不是四舍五入.请参考:Python实现四舍五入的方法. 看代码吧,要注意round函数在去小数点后N ...
- 【问题解决】python中round()函数并非四舍五入
对于python中的round()函数,我们简单的认为是四舍五入,其实不然 对于偶数 >>> round(4.5) 4 对于奇数 >>> round(5.5) 6 ...
最新文章
- JCo3 建立连接到SAP(2)- 连接池
- C#, ASP.NET面试题系列(1)
- php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
- php单词出现频率,PHP计算文件或数组中单词出现频率
- 使用组合索引你得注意了
- android图片选择器框架支持长图,基于RxJava的Android图片选择器. – RxPicker
- spring 组件扫描_避免不必要的Spring配置组件扫描
- [css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?
- 友元关系可以继承_私生子也有继承权!非婚生子女的继承关系如何认定?
- android常见传值
- 关于Axure RP
- 算法不会,尚能饭否之集合(Set)
- Vue.js 关于router传参那点事儿
- Win Server 2012 R2 安装SQL 2016先决条件
- 【脑电信号】基于matlab SVM分期睡眠监测【含Matlab源码 611期】
- 近红外光谱建模之区间偏最小二乘法python实现(ipls算法)
- 树莓派第一次使用WIN10电脑远程连接(无显示器)
- 搭建一个专属于两个人的爱情网站,记录生活中的点点滴滴
- Qt控件--QComboBox存储自定义数据
- 「硬核讲解」通达信跨周期引用均线指标公式