python中关于round函数的小坑 - _小苹果 - 博客园​www.cnblogs.com

同样的坑:整数a/100 不等于a×0.01

在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,还有一些比较另类的库)。

参考了一下文档,试过多种就解决办法:

1,试过高精度包 decimal, (没有成功的将 12.5 变成13)

decimal.Decimal('2.5').quantize(decimal.Decimal('1'),rounding=decimal.ROUND_HALF_UP)9.4. decimal - Decimal fixed point and floating point arithmetic - Python 3.6.5 documentation​docs.python.org

2,更改getcontext().rounding = ROUND_HALF_UP (默认值为ROUND_HALF_EVEN)

3, python这个小细节在结算业务确实挺吓人,我还是手写取整函数吧:

import math

def round_five_up(self, dit):

""":param dit: 取整的浮点数:return:"""

(point_d, int_d) = math.modf(dit)

print(point_d)

if int_d > 0 and point_d >= 0.5:

return int(int_d) + 1

if int_d < 0 and point_d <= -0.5:

return int(int_d) - 1

return int(int_d)

python 人数取整_避免PYTHON取整四舍六入五成双问题相关推荐

  1. Python 四舍六入五成双

    在Python2和Python3中对于round()函数的取值的的区别 例: 1.  Python2中对round()函数的取值 print(round(24.5)) 输出结果: 25 2.  当Py ...

  2. python中round函数的精度保留方法---四舍六入五成双

    当我们利用python进行数据计算时,通常会对浮点数保留相应的位数,这时候就会用到round函数,相信各位朋友在进行使用时会遇到各种问题,关于round函数保留精度.保留方法的问题,本文会进行详细的解 ...

  3. 【Python】银行家算法(四舍六入五成双)和使用decimal进行四舍五入处理

    在python3中,round(num,n)和'%.nf'%num都是使用银行家算法进行小数位的处理的,即四舍六入五成双.(python2不记得了) 四舍六入五成双介绍 和四舍五入不同的是,对于最大小 ...

  4. c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000;        //宏定义保留3位小数 double fun(double ...

  5. unity笔记_四舍六入五成双

    float Round(float num, int length)//0.58{string str = num.ToString();//传入整数,没有小数点if (!str.Contains(& ...

  6. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...

    做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...

  7. java 四舍六入五成双_【数据小常识】“四舍六入五成双”

    "四舍六入五成双"规则如下: "四舍六入五成双",也即"4舍6入5凑偶",这里"四"是指≤4 时舍去,"六&q ...

  8. mysql 五舍六入_四舍六入五成双(适用于MYSQL)(最大支持小数点第9位)

    ZRound CREATE FUNCTION ZRound(num DECIMAL(38,14) ,i INT) RETURNS varchar(20) BEGIN /*原数据转换成字符类型*/ DE ...

  9. java 四舍六入五成双_显示格式的四舍六入五成双

    一.问题描述 在使用快逸复杂报表设计" target="_blank" class="quieeLink1">设计器时,若单元格内的信息为数值, ...

最新文章

  1. 学霸现身!博士生发18篇SCI,4篇CNS子刊,开学典礼上全场震撼
  2. android LaunchMode之SingleTask
  3. PDO的bindParam与bindValue的区别
  4. mysql设计积分兑换表_积分系统数据库表设计.docx
  5. 世界最小晶体管问世 栅极长度仅一纳米
  6. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
  7. 深度学习02——Softmax、DNN、WideDeep Model
  8. mac ---- 安装nginx
  9. Android 开发者成神之路!
  10. 去哪网实习总结:JavaWeb配置404页面(JavaWeb)
  11. bzoj 1003: [ZJOI2006]物流运输
  12. Openssl crl2pkcs7命令
  13. 信息安全工程师第二版知识点总结
  14. sqlalchemy 8 会话 与 异常
  15. jquery ready vue_我在切换路由器$(document).ready()失败时在模板中使用vue-router和jQuery...
  16. 关于阿里云服务器可以怎么选择地域
  17. md文件的简洁打开方式
  18. 蓝桥云课linux入门2:基本概念及操作
  19. 中国医疗器械标准网站(全网最全)
  20. 【buildroot】buildroot使用总结

热门文章

  1. 超声波五档电动牙刷方案
  2. 【Numpy】创建数组
  3. Nodeway--基于node.js的轻量级前后端分离框架
  4. 透过 Delphi 使用二进位金钥做 AES 加密.
  5. 阿里巴巴2020暑期实习笔试题目及经验分享
  6. 大型网站架构与分布式架构
  7. 暗灰色android代码,Android实现制作灰色图片
  8. php 数组转换逗号_PHP implode():数组转字符串
  9. MySQL建表语句+添加注释
  10. python多个分隔符分割字符串_Python之使用多个分割符分割字符