在使用Python3处理浮点数时会遇到处理精度的问题,例如:

>>> a = 2019.9102

>>> b = 666.333

>>> a - b

1353.5772000000002

>>> a = 2019.0428

>>> b = 1011.0823

>>> a - b

1007.9604999999999

上面两段代码中 a - b 得到的结果,显然都肉眼可见的存在误差.

一般情况下,可以使用round()方法进行处理,如:

>>> a = 2019.9102

>>> b = 666.333

>>> round(a - b, 4)

1353.5772

四舍五入,并保留到小数点后4位,便可'解决'这个问题,那一大串不需要的数字消失了.

但是round()函数也有个小陷阱,如0.5案例:

>>> a = round(0.4)

>>> b = round(0.5)

>>> c = round(0.6)

>>> a, b, c

(0, 0, 1)

如上,当近似值正好影响了四舍五入的位时,就有可能出现这种情况,本该进的位,结果给舍了...

也就是说,不管你怎么处理,只要最后末尾出现5,就有可能出现问题...

幸好,math模块中的提供了ceil()方法和floor()方法.

对数据进行处理,如下:

>>> import math

>>> a = 87.654321

>>> math.ceil(a)

88

>>> n = 2

>>> math.ceil(a*10**n)/(10**n)

87.66

使用ceil()方法将数字向上取整,默认舍弃所有小数部分,得到88.可以通过移动小数点的方式保留需要数据(n为想要保留的小数点后的位数),得到87.66.

>>> import math

>>> a = 12.345678

>>> math.floor(a)

12

>>> n = 2

>>> math.floor(a*10**n)/(10**n)

12.34

使用floor()方法将数字向下取整,默认舍弃所有小数部分,得到12.可以通过移动小数点的方式保留需要数据(n为想要保留的小数点后的位数),得到12.34.

到这里可以总结一下了:

使用round()进行四舍五入处理也不是不行,但是偶尔会...不那么可靠...所以,如果你的目的只是舍弃不进位的话,那么floor()就稳得一b了,但是想要做到万无一失的四舍五入,可能还是得写一个函数,结合math模块来实现,或者干脆转成字符串切一下,分别处理再组合....函数就不放了,也不是什么难事儿,就是麻烦一些了.

python保留小数不四舍五入_Python3小数(浮点数)精度处理,[不]四舍五入去小数点后几位...相关推荐

  1. python3的float数精度_python浮点数精度问题

    python浮点数的计算,结果并不像我们想象的那样,比如: >>> 0.25+0.25-0.4 0.09999999999999998 >>> 0.6+0.3-0. ...

  2. Python之保留小数点后n位、向上取整、向下取整以及四舍五入函数

    一.保留小数点后n位 方法一:使用字符串格式化 注意:使用字符串格式化后的是字符串格式 a = 12.3456 print("%.3f"%a) #保留小数点后三位 print(&q ...

  3. python四舍五入保留小数点后三位_Python中的“正确”四舍五入到小数点后3位

    我可能遗漏了一些重要的东西,但我无法找到一种方法来在Python(2.7)中将浮点/小数"适当"舍入,至少舍入到小数点后三位.我的意思是1.2225应该四舍五入到1.223,而1. ...

  4. python 浮点数精度丢失_javascript解决小数的加减乘除精度丢失的方案

    原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3* ...

  5. Python保留两位小数

    >>> a = 5.026 >>> b = 5.000#round()浮点数四舍五入以及设定其小数位数 >>> round(a,2) 5.03 & ...

  6. python 浮点数精度丢失_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源...

    浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源 无论在java python javaScript里面都存在 1+ 2!== 3 问题,这个问题的产生根源在于计算存储数字是二进制,对无限循环小 ...

  7. Java中的浮点数四舍五入到小数点后2位的一些实用方法

    前言 四舍五入到2或3个小数位是我们Java程序员日常开发中肯定会遇到.幸运的是,Java API提供了几种在Java中舍入数字的方法 我们可以使用Math.round(),BigDecimal或De ...

  8. js除法四舍五入保留小数点后两位写法

    原文连接 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> &l ...

  9. C#--浮点数取小数点后两位和保留两位

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:浮点数取小数点 ...

最新文章

  1. 【SeeMusic】下载安装并注册 SeeMusic 软件
  2. .NET泛型解析(上)
  3. android 如何判断有没有网络
  4. 1.12 四类向量组
  5. Java 8:正在运行的CompletableFuture
  6. 01背包怎么不重复_带有重复物品的背包
  7. mysql临时表 清空_在数据库中临时表什么时候会被清除呢
  8. SpringBoot 项目构建 Docker 镜像调优实践
  9. 设置div的高度_html中如何让div居中
  10. python编程入门-python编程入门(第3版)
  11. 员工收“老板”QQ消息转账98万 警方挽回被骗资金
  12. Mysiam锁模式 innodb锁模式 是什么区别
  13. 基于matlab的语音识别系统
  14. python文本文件合并,python将多个文本文件合并为一个文本的代码(便于搜索)
  15. 高中计算机会考vb试题,高中信息技术考试vb程序题及答案
  16. html从谷歌浏览器跳转到IE,IE浏览器和谷歌浏览器相互跳转
  17. 微信新功能,最牛的不是“斗图”!
  18. win10 请求操作需要提升解决方案
  19. 计算机的硬盘 u盘启动,设置U盘启动和硬盘启动两种差别教程步骤
  20. imagenet数据集类别标签和对应的英文中文对照表

热门文章

  1. Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑
  2. 如何在Spring Boot中玩转智能合约【修订版】
  3. http请求的3位返回码简单解释
  4. PyTorch模型量化工具学习
  5. mxnet优化器 SGD_GC
  6. BrokenPipeError: [WinError 109] 管道已结束。
  7. python turtle 画风轮
  8. 生成多个互不重叠的不同半径圆
  9. python ord()与chr()用法以及区别
  10. This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery'