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浮点型数据小数点的取舍的更多相关文章

  1. 【C语言入门教程】2.4 浮点型数据

    浮点型数据又称实型数据,是一个以十进制表示的符号实数.符号实数的值包括整数部分.尾数部分和指数部分. 2.4.1 浮点型常量 一些较大的数值,或者有小数位.指数位的数值都需要用浮点型常量表示.浮点型常 ...

  2. 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理

    使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...

  3. Java中浮点型数据Float和Double进行精确计算的问题

    Java中浮点型数据Float和Double进行精确计算的问题 来源  https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失     ...

  4. 14、Java中用浮点型数据Float和Double进行精确计算时的精度问题

    一.浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个 ...

  5. SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串

    在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...

  6. C语言之四则运算表达式求值(链栈)—支持浮点型数据,负数, 整型数据运算

     运算符间的优先级关系: 链栈结构体定义: 数据域使用字符串长度为20的字符数组(故需要注意判断读取的字符串是运算符还是数值) 可支持浮点型数据,负数, 整型数据的运算 float EvaluateE ...

  7. python和数据科学(Anaconda)

    Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...

  8. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  9. python爬虫+数据可视化项目(关注、持续更新)

    python爬虫+数据可视化项目(一) 爬取目标:中国天气网(起始url:http://www.weather.com.cn/textFC/hb.shtml#) 爬取内容:全国实时温度最低的十个城市气 ...

随机推荐

  1. Jmeter:非 GUI 命令行执行脚本文件

    介绍 进行性能测试时,Jmeter 官方文档声明是不建议在 GUI 执行的,此时需要用到命令行. 第一步:环境配置 把 Jmeter安装目录\bin 添加到 系统环境变量path 第二步:命令参数 - ...

  2. 部署nginx脚本

    cd nginx-1.12.2useradd -s /sbin/nologin nginx./configuremakemake installyum -y install mariadb maria ...

  3. C#:调用存储过程方法

    MySqlParameter p1 = new MySqlParameter("id", MySqlDbType.Int32); p1.Value = sid; MySqlPara ...

  4. 【每日一包0011】pad

    [github地址:https://github.com/ABCDdouyae...] pad 给字符串的左右加padding,也可以用于删减字符串两端 用法:pad(str, length, opt ...

  5. 利用jQuery实现图片无限循环轮播(不借助于轮播插件)

    原来我主要是用Bootstrap框架或者swiper插件实现轮播图的功能,而这次是用jQuery来实现图片无限循环轮播! 用到的技术有:html.css.JavaScript(少).jQuery(主要 ...

  6. 1 request模块

    官方文档真是好用的一匹 官方文档:https://2.python-requests.org//zh_CN/latest/index.html 参考blog:https://www.cnblogs.c ...

  7. RSA加密解密,Base64String

    ///<remarks> /// DotNet.Utilities.RSACryption cryption = new DotNet.Utilities.RSACryption(); / ...

  8. C# 检测 代码耗时

    static void SubTest() { Stopwatch sw = new Stopwatch(); sw.Start(); //耗时巨大的代码 sw.Stop(); TimeSpan ts ...

  9. call和ret指令

    call和ret都是用来修改ip或cs:ip,可以用来实现子程序的设计:   1.ret和retf ret    ->修改ip的内容,从而实现近转移: retf    ->同时修改cs和i ...

  10. canvas addHitRegion()

    CanvasRenderingContext2D.addHitRegion() 是 Canvas 2D API 给位图添加点击区域的方法. 但是 mobile 都不兼容