python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结

您所在的位置:网站首页 python取位运算 python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结

python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结

2023-11-04 11:45| 来源: 网络整理| 查看: 265

在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢?

文章目录 一.小数点后取2位(四舍五入)的方法方法一:round()函数方法二:'%.2f' %f 方法方法三:Decimal()函数 二.小数点后取2位(四舍五不入)的方法方法一:

一.小数点后取2位(四舍五入)的方法 方法一:round()函数

1.首先不推荐使用这个函数、python2和python3对应的效果还不太一样,使用的时候慎重! 2.也感谢评论区网友的提示,有人说具体用法是**四舍六入五成双**。但是发现也不太对,还是有坑的,各位看官请看? 3.欢迎各位来补充?

四舍六入五成双, 四舍六入五凑偶的意思, 根据百度词条的解释如下:

(1)当精确位后面一位的数字是1-4的时候,舍去(2)当精确位后面一位的数字是6-9的时候,进1位(3)当精确位后面一位的数字是5的,此时需要看这个5后面是否还有值。如果5后面有值(0忽略),则直接进位;(4)如果5后面没值或值为0,则需要判断5前面的值是偶数还是奇数。(5)如果5前面是偶数,不进位;如果是奇数,进位。 为了方便大家的理解,各种情况都测试一下。默认都是按照:小数点后2位有效数字取值小数点第二位就是精确位,小数点后第三位就是我们重点关注的位数 # (1)、(2)规则 a = 1.45321 b = 2.45678 print(round(a, 2)) print(round(b, 2)) # 打印内容 1.45 2.46 # (3)规则 a = 1.12500002 b = 2.15500002 c = 2.15500000 print(round(a, 2)) print(round(b, 2)) print(round(c, 2)) # 打印内容 1.13 2.16 2.15

小数点后第三位是我们重点关注的,而第三位后面还有值,那直接进位。上面案例中2.155后面的几个0,都忽略。

# (4)、(5)规则 print(round(1.205, 2)) print(round(1.215, 2)) print(round(1.225, 2)) print(round(1.235, 2)) print(round(1.245, 2)) print(round(1.255, 2)) print(round(1.265, 2)) print(round(1.275, 2)) print(round(1.285, 2)) print(round(1.295, 2)) # 打印内容 1.21 # 1.205---进位 1.22 # 1.215---进位 1.23 # 1.225---进位 1.24 # 1.235---进位 1.25 # 1.245---进位 1.25 # 1.255---未进位 1.26 # 1.265---未进位 1.27 # 1.275---未进位 1.28 # 1.285---未进位 1.29 # 1.295---未进位

通过以上打印结果发现, (4)、(5)规则根本就不适用上述情况。总结规律如下: 如果精确位后面的一位是5,且5后面没其他数值,此时精确位如果是0—4,则进位(5种情况)。如果是5–9则不进位(5种情况)。 我的理解是,不同语言、不同函数的处理都是细微的差别。但总归把进位和不进位的概率,都是平均分布的。

最终的规律总结如下:

(1)当精确位后面一位的数字是1-4的时候,舍去(2)当精确位后面一位的数字是6-9的时候,进1位(3)当精确位后面一位的数字是5的,此时需要看这个5后面是否还有值。如果5后面有值(0忽略),则直接进位;(4)如果5后面没值或值为0,则需要判断精确位的区间,如果是0—4,则进位。如果是5–9,则不进位。

各位看官,不知道我解释的够清楚了吗?如果感觉还行,帮忙点个赞吧!!!

方法二:’%.2f’ %f 方法 f = 1.23456 print('%.4f' % f) print('%.3f' % f) print('%.2f' % f)

结果:

1.2346 1.235 1.23 (1)原本以为:这个方法是最常规的方法,方便实用,居家旅行必备!(2)但是… f = 0.625 print('%.2f' % f) # 结果:0.62

具体是否进位,有个概率问题,感兴趣的朋友可以看看评论里面的信息。 感谢weixin_43094430这位朋友的提示,也感谢其他朋友的参与

方法三:Decimal()函数 from decimal import Decimal aa = Decimal('5.026').quantize(Decimal('0.00')) bb = Decimal('3.555').quantize(Decimal('0.00')) cc = Decimal('3.545').quantize(Decimal('0.00')) print(aa) print(bb) print(cc)

结果:

5.03 3.56 3.54

decimal这个模块在很少用,如上图中,3.555结果为3.56,而3.545结果变为3.54,一个5进位了,一个是5没进位,具体原因不详。 所以不推荐使用这个方法!!!

二.小数点后取2位(四舍五不入)的方法

通过计算的途径,很难将最终结果截取2位,我们直接想到的就是如果是字符串,直接截取就可以了。 例如

num = '1234567' #字符串num print(num[:3]) 结果: 123

如果是123.456取2位小数(截取2位小数),值需要把小数点右边的当做字符串截取即可 partition()函数(将字符串根据字符串切割): http://www.runoob.com/python/att-string-partition.html

num = '123.4567' num_str = num.partition(".") print(num_str) 结果: ('123', '.', '4567') # 三个元素的元祖

拼接字符串:format()函数的使用 https://blog.csdn.net/i_chaoren/article/details/77922939

方法一: def get_two_float(f_str, n): a, b, c = f_str.partition('.') c = c[:n] return ".".join([a, c]) num = "123.4567" #(1)隐患一,传入函数的是字符串 print(get_two_float(num, 2)) num2 = '123.4' # (2)隐患二,如果传入的字符串小数位小于最终取的位数 print(get_two_float(num2, 2))

结果:

123.45 123.4 最终版本: def get_two_float(f_str, n): f_str = str(f_str) # f_str = '{}'.format(f_str) 也可以转换为字符串 a, b, c = f_str.partition('.') c = (c+"0"*n)[:n] # 如论传入的函数有几位小数,在字符串后面都添加n为小数0 return ".".join([a, c]) num = 123.4567 print(get_two_float(num, 2)) num2 = 123.4 print(get_two_float(num2, 2))

结果:

123.45 123.40


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3