总结一下小数精度的处理问题

一、round()函数内置方法

round(number,[ndigits]):round 对传入的数据进行四舍五入,但并不是传统意义上的四舍五入。number:需要被处理的参数;ndigits:保留的位数。

ndigits:不取值,number的小数部分没有0.5的时候,则按照四舍五入进行取值;

不取值,number的小数部分存在0.5的时候,round()取靠近的偶数;

取值,number的小数部分没有.5的时候,则按照四舍五入进行取值;

取值,number的小数部分存在.5的时候,小数位前是奇数则舍弃,小数位前是偶数则向上取(意味着,一旦出现小数位后为.5的,则小数位前取值,无法取到偶数);

#ndigits 不取值的时候

print("1:", round(2.5)) #存在0.5,取值靠近偶数: 2

print("2:", round(2.55)) #不存在0.5,取值按照四舍五入:3

print("3:", round(3.5)) #存在0.5,取值靠近偶数:4

print("4:", round(4.5)) #存在0.5,取值靠近偶数:4

print("5:", round(4.54)) #不存在0.5,取值按照正常的四舍五入

print("6:", round(5.5)) #存在0.5,取值靠近偶数:6

#ndigits 取值的时候

print("7:", round(2.635, 2)) #存在.5,小数位前奇数: 2.63

print("8:", round(2.645, 2)) #存在.5,小数位前偶数:2.65

print("9:", round(2.655, 2)) #存在.5,小数位前奇数:2.65

print("10:", round(2.665, 2)) #存在.5,小数位前偶数:2.67

print("11:", round(2.675, 2)) #存在.5,小数位前奇数:2.67

print("12:", round(2.634, 2)) #不存在.5,按照四舍五入: 2.63

print("13:", round(2.636, 2)) #不存在.5,按照四舍五入: 2.64

二、格式化处理

输出格式%.mf:处理机制个round()函数一致,m指取得位数,f是指float数据类型

#m不取值的时候

print("1: %.f" % 2.5) #存在0.5,取值靠近偶数: 2

print("2: %.f" % 3.5) #存在0.5,取值靠近偶数: 4

print("3: %.f" % 3.4) #不存在0.5,按照四色五入: 2

print("4: %.f" % 3.6) #不存在0.5,按照四舍五入: 2

#m=2 取值的时候

print("4: %.2f" % 2.635) #存在.5,小数位前奇数: 2.63

print("5: %.2f" % 2.645) #存在.5,小数位前偶数:2.65

print("6: %.2f" % 2.655) #存在.5,小数位前奇数:2.65

print("7: %.2f" % 2.665) #存在.5,小数位前偶数:2.67

print("8: %.2f" % 2.675) #存在.5,小数位前奇数:2.67

print("9: %.2f" % 2.634) #不存在.5,按照四舍五入: 2.63

三、超过17位精度分析

python中默认的为17位小数精度,但如果我们需要使用更高精度的时候(意味着超过17位小数),如果处理?

使用前面两种方法进行处理,查看一下处理结果:

print("1: %.30f" % (1/3)) #输出:1: 0.333333333333333314829616256247

print("2: %s" % round((1/3), 30)) #输出:2: 0.3333333333333333

显然前面两种方法是不适用的,round()内置函数其结果只能取到小数点后16位;而格式化处理虽然可以取到30位,但其精度是不准确的。

下面介绍一种方法:高精度使用 decimal模块,配合getcontext

print(getcontext())

getcontext().prec= 50 #设置全局精度

b = Decimal(1)/Decimal(3)print(b)

c= Decimal(1)/Decimal(17)print(float(c))

四、关于小数和取整

1.math模块下的ceil(x)函数:取大于或者等于x的最小整数

2.math模块下的floor(x)函数:取小于或者等于x的最大整数

from math importceil, floor#ceil():取大于或等于x的最小整数

print("1: %s" % ceil(2.5)) #1: 3

print("2: %s" % ceil(2.3)) #2: 3

print("3: %s" % ceil(2.6)) #3: 3

#floor():取小于或等于x的最大整数

print("4: %s" % floor(2.5)) #4: 2

print("5: %s" % floor(2.3)) #5: 2

print("6: %s" % floor(2.6)) #6: 2

五、截取小数点后bit位

编写函数cut(self,bit)进行处理

defcut(self, bit):

str_sli= str(self).split('.', 1)

sli= len(str_sli[0]) + bit + 1result=str(self)[:sli]returnresult

a= cut(3.1356, 2)print(a) #输出结果为: 3.13

python小数精度_python.day.02——小数精度控制问题相关推荐

  1. python的浮点数_python中浮点数的精度

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python中,浮点数运算,经常会碰到如下情况:? 出现上面的情况,主要还是因浮 ...

  2. python 小数点精度_Python 3浮点小数点/精度 - python

    我正在读取一个带有浮点数的文本文件,这些数字都带有1或2个小数点.我正在使用float()将行转换为浮点数,并在失败的情况下引发ValueError.我将所有花车存储在列表中.打印时,我想将其打印为2 ...

  3. 用python计算准确率_Python中计算模型精度的几种方法,Pytorch,中求,准确率

    方法一:直接在epoch过程中求取准确率 简介:此段代码是LeNet5中截取的. def train_model(model,train_loader): optimizer = torch.opti ...

  4. python app服务器_Python应用02 Python服务器进化

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleH ...

  5. python自动控制库_python PyAUtoGUI库实现自动化控制鼠标键盘

    PyAutoGUI 不知道你有没有用过,它是一款用Python自动化控制键盘.鼠标的库.但凡是你不想手动重复操作的工作都可以用这个库来解决. 比如,我想半夜时候定时给发个微信,或者每天自动刷页面等操作 ...

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

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

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

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

  8. python 精度损失_Python的浮点数损失精度问题

    本篇讨论的现象可以从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print(x) 0.1 0. ...

  9. python float精度问题_Python之☞float浮点数精度问题

    (下面是精度漏洞的问题-转自其它) 从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print( ...

最新文章

  1. 微服务架构转型需要关注的运维监控的技术和建议
  2. 2、Get和post的区别
  3. oracle 存储过程
  4. 宝塔apache mysql_商淘多商户商城系统部署之宝塔面板(Nginx/Apache+MySQL+PHP7.1)
  5. uva 11134——Fabled Rooks
  6. 【Python】提升Python程序性能的好习惯
  7. Codeforces Round #402 D String Game(二分)
  8. 人工智障学习笔记——机器学习(1)特征工程
  9. 第22篇 js中的this指针的用法
  10. 不知道怎么用GitHub怎么当程序员?拿出十分钟,包你会
  11. 破局:滚动率知识在信贷风控中的系统总结
  12. java angularjs 跨域访问_AngularJS实现跨域请求
  13. python游戏按键无效_瞬速掌握Python系统管理-调试和分析脚本1-debugging
  14. xamarin android 设备,【Xamarin.Android】在Visual Studio中增强设备日志记录
  15. LINUX系统使用锐捷客户端认证校园网(华中科技大学)
  16. 高效办公之Windows高效技巧提高你的工作效率
  17. 办公专用计算机配置,办公电脑用什么配置的好 2017办公电脑配置推荐
  18. BTN7971B电机驱动设计(含原理图)
  19. 阅读---读吴军博士《态度》有感
  20. 超神战记不显示服务器,《超神战记》停运公告

热门文章

  1. 【配置】销售开票后未产生成本结转科目排查
  2. android 自定义view使用Canvas实现支付宝咻一咻功能
  3. xlsxwriter EXCEL文件的写入
  4. 世界VR产业大会最吸引人气的打卡点之一,“秒”变数字人有何魅力?
  5. 森林图怎么分析_股票趋势图怎么看 这些炒股基础知识建议掌握-趋势分析-股票技巧-股票入门基础知识学习网...
  6. 参加得物《企业协作效率演进之路》线下沙龙暨COC上海城市开发者社区7月活动
  7. 廖雪峰老师的Python入门 day01
  8. 前端 Bootstrap
  9. Polyfill是什么
  10. 懒人反编译辅助脚本工具