小数精度控制问题,ROUND函数的使用

唯一官网,SQL ROUND函数是对数据进行制定精度的取值。

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

唯一官网 1

一、round()函数内置方法

 

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

第一个参数是取值的数据,第二个参数是精度,第三个参数是数据取值模式(四舍五入还是截断),其中第三个参数是可选参数,默认是四舍五入模式。

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

唯一官网 2

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

 

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

 从上面结果可以看出,数据并非只保留两位小数,而是保留两位有效小数。

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

唯一官网 3

#  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

从上面两次可以看出,默认不使用第三个参数是四舍五入模式。

二、格式化处理

唯一官网 4

  输出格式%.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

第三个参数如果是0,则四舍五入,如果是非0,则截断

三、超过17位精度分析

唯一官网 5

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

通过结果发现,后面的5被截断,保留了两位有效小数。

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

本文由澳门新萄京官方网站发布于信息数据库,转载请注明出处:小数精度控制问题,ROUND函数的使用

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。