Python浮点型数据小数点的取舍
python默认的是17位小数的精度
1、round()内置方法
π=3.1415926535
new_num=round(π,2) #四舍五入保留两位小数
print(new_num) #结果为:3.14
round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数,这就是为什么
round(2.5) = 2。当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小数是奇数,则直接舍弃,如果偶数这向上取舍。
2、格式化(效果等同于round())
>>> a=('%.2f'%3.235)
>>> a
'3.23'
>>> a=('%.2f'%3.245)
>>> a
'3.25'
>>> a=int(6.5)
>>> a
6
>>> a=int(6.665)
>>> a
6
超过17位小数的高精度
1、使用格式化(不推荐)
>>> a='%.20f'%(1/3)
>>> a
'0.33333333333333331483'
可以看出结果不准确,后面的数字往往没有意义。
2、使用decimal模块,配合getcontext
>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec=20
>>> b=decimal(1)/decimal(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'decimal' is not defined
>>> b=Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333')
>>> c=Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882')
>>> float(c)
0.058823529411764705
取整数
1、round()上面已经讲过了,这里就不再做说明
2、math模块的ceil(x)
取大于或者等于x的最小整数。
>>> from math import *
>>> x=6.56
>>> ceil(x)
7
>>> x=6.06
>>> ceil(x)
7
3、math模块的floor(x)
取小于或者等于x的最大整数。
>>> from math import *
>>> x=8.00001
>>> floor(x)
8
>>> x=8.9999999999
>>> floor(x)
8
4、math模块的trunc(x)
截断除法,返回x的整数部分
>>> from math import *
>>> a=trunc(5.6789)
>>> a
5
>>> a=trunc(5.1234)
>>> a
5
>>> pi #数字常量,圆周率
3.141592653589793
>>> a=trunc(pi)
>>> a
3
round()函数当中有许多小坑
>>> a=round(1.675, 2)
>>> a
1.68
>>> a=round(2.675, 2)
>>> a
2.67
这些坑笔者也没搞清楚怎么回事,希望各位大佬指点
参考资料:https://www.cnblogs.com/herbert/p/3402245.html
Python浮点型数据小数点的取舍的更多相关文章
- 【C语言入门教程】2.4 浮点型数据
浮点型数据又称实型数据,是一个以十进制表示的符号实数.符号实数的值包括整数部分.尾数部分和指数部分. 2.4.1 浮点型常量 一些较大的数值,或者有小数位.指数位的数值都需要用浮点型常量表示.浮点型常 ...
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...
- Java中浮点型数据Float和Double进行精确计算的问题
Java中浮点型数据Float和Double进行精确计算的问题 来源 https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失 ...
- 14、Java中用浮点型数据Float和Double进行精确计算时的精度问题
一.浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个 ...
- SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串
在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...
- C语言之四则运算表达式求值(链栈)—支持浮点型数据,负数, 整型数据运算
运算符间的优先级关系: 链栈结构体定义: 数据域使用字符串长度为20的字符数组(故需要注意判断读取的字符串是运算符还是数值) 可支持浮点型数据,负数, 整型数据的运算 float EvaluateE ...
- python和数据科学(Anaconda)
Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...
- 用 Python 排序数据的多种方法
用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...
- python爬虫+数据可视化项目(关注、持续更新)
python爬虫+数据可视化项目(一) 爬取目标:中国天气网(起始url:http://www.weather.com.cn/textFC/hb.shtml#) 爬取内容:全国实时温度最低的十个城市气 ...
随机推荐
- 谷歌插件学习笔记:把iframe干掉……
好久不写博客了,感觉自己变得越来越懒了,是没有时间吗?不是,是自己变得越来越懒了,好多东西不愿意去总结了,可能也是学的不精总结不出来什么玩意儿.不过,一切都是借口.还是坚持学习,坚持写博客吧,虽然写的 ...
- router-link to 动态赋值
路由定义: 动态赋值: <router-link :to="{path:'/old_data_details/params/'+item.id}" > </rou ...
- BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
对于每种信仰维护一棵动态开点线段树就行了- #include <cstdio> #include <cctype> #include <cstring> #incl ...
- 给PS添加ICO格式文件
为什么你的ps不能直接打开favicon.ico文件呢?因为你没有安装识别ico的格式插件. 安装步骤如下: 下载格式文件:https://pan.baidu.com/s/1lE0El1VtDqD5l ...
- java+Word图片上传控件
这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...
- Linux 打印可变参数日志
实现了传输进去的字符串所在的文档,函数和行数显示功能. 实现了将传入的可变参数打印到日志功能. #include<stdio.h> #include<stdarg.h> #in ...
- CF1228F One Node is Gone
题目链接 问题分析 这题感觉就是有很多种方法,然后一种都写不明白-- 首先分为3种情况: 删了根节点下的一个节点,对应两个答案: 删了一个叶节点,对应一个答案: 删了一个其他节点,对应一个答案. 可以 ...
- spark on yarn 动态资源分配报错的解决:org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:spark_shuffle does not exist
组件:cdh5.14.0 spark是自己编译的spark2.1.0-cdh5.14.0 第一步:确认spark-defaults.conf中添加了如下配置: spark.shuffle.servic ...
- fatal error C1189: #error: "Oops: min() and/or max() are defined as preprocessor macros. Define NOMINMAX macro before including any system headers!"
1.问题描述 vs2015 使用pg数据库的C++库文件4.0.1版本libpqxx.dll,包含头文件#include "pqxx\pqxx" 出现这个错误: fatal err ...
- ubuntu16.04 anaconda3安装
1.使用清华镜像源下载 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.1.0-Linux-x86_64. ...