python 人数取整_避免PYTHON取整四舍六入五成双问题
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 documentationdocs.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取整四舍六入五成双问题相关推荐
- Python 四舍六入五成双
在Python2和Python3中对于round()函数的取值的的区别 例: 1. Python2中对round()函数的取值 print(round(24.5)) 输出结果: 25 2. 当Py ...
- python中round函数的精度保留方法---四舍六入五成双
当我们利用python进行数据计算时,通常会对浮点数保留相应的位数,这时候就会用到round函数,相信各位朋友在进行使用时会遇到各种问题,关于round函数保留精度.保留方法的问题,本文会进行详细的解 ...
- 【Python】银行家算法(四舍六入五成双)和使用decimal进行四舍五入处理
在python3中,round(num,n)和'%.nf'%num都是使用银行家算法进行小数位的处理的,即四舍六入五成双.(python2不记得了) 四舍六入五成双介绍 和四舍五入不同的是,对于最大小 ...
- c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...
复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000; //宏定义保留3位小数 double fun(double ...
- unity笔记_四舍六入五成双
float Round(float num, int length)//0.58{string str = num.ToString();//传入整数,没有小数点if (!str.Contains(& ...
- sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...
- java 四舍六入五成双_【数据小常识】“四舍六入五成双”
"四舍六入五成双"规则如下: "四舍六入五成双",也即"4舍6入5凑偶",这里"四"是指≤4 时舍去,"六&q ...
- mysql 五舍六入_四舍六入五成双(适用于MYSQL)(最大支持小数点第9位)
ZRound CREATE FUNCTION ZRound(num DECIMAL(38,14) ,i INT) RETURNS varchar(20) BEGIN /*原数据转换成字符类型*/ DE ...
- java 四舍六入五成双_显示格式的四舍六入五成双
一.问题描述 在使用快逸复杂报表设计" target="_blank" class="quieeLink1">设计器时,若单元格内的信息为数值, ...
最新文章
- 学霸现身!博士生发18篇SCI,4篇CNS子刊,开学典礼上全场震撼
- android LaunchMode之SingleTask
- PDO的bindParam与bindValue的区别
- mysql设计积分兑换表_积分系统数据库表设计.docx
- 世界最小晶体管问世 栅极长度仅一纳米
- 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
- 深度学习02——Softmax、DNN、WideDeep Model
- mac ---- 安装nginx
- Android 开发者成神之路!
- 去哪网实习总结:JavaWeb配置404页面(JavaWeb)
- bzoj 1003: [ZJOI2006]物流运输
- Openssl crl2pkcs7命令
- 信息安全工程师第二版知识点总结
- sqlalchemy 8 会话 与 异常
- jquery ready vue_我在切换路由器$(document).ready()失败时在模板中使用vue-router和jQuery...
- 关于阿里云服务器可以怎么选择地域
- md文件的简洁打开方式
- 蓝桥云课linux入门2:基本概念及操作
- 中国医疗器械标准网站(全网最全)
- 【buildroot】buildroot使用总结