在很多场景的计算中,最终得到的数值例如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.23456print('%.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 Decimalaa = 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为小数0return ".".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

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

  1. Python中小数的处理

    Python中小数的处理包括四舍五入.取整(向上取整.向下取整),向0取整,获取一个数的小数部分. 四舍五入 需要用到round(value, 保留的小数位数)函数,如下49.698按照四舍五入保留两 ...

  2. parseFloat() 小数点后不为0,就保留2位。否则为整数

    parseFloat(100.99) 100.99 parseFloat(100.00) 100 parseFloat(.00) 0 小数点后不为0,就保留2位.否则为整数

  3. MySQL数字的取整、四舍五入、保留n位小数

    数学函数是MySQL中常用的一类函数.其主要用于处理数字,包括整型和浮点数等等. MySQL常用的四舍五入函数: 函数 说明 FLOOR(X) 返回不大于X的最大整数. CEIL(X).CEILING ...

  4. 在小数点后某一位四舍五入,即保留几位小数(MATLAB)

    1.数值型:roundn,小数点后任意一位位置四舍五入 >>a=123.4567890; >>a=roundn(a,-4) a = 123.4568

  5. python保留小数点后位数_Python保留指定位数的小数

    Python保留指定位数的小数 1 '%.2f' %f 方法(推荐) f = 1.23456 print('%.4f' % f) print('%.3f' % f) print('%.2f' % f) ...

  6. php函数向上取整数,php四舍五入、精确2-3位小数位及向上取整的方法

    在日常开发中我们经常会有些数值计算,我们可能需要对计算结果进行四舍五入.保留2,3位小数位,向上取整,向下取整等操作. 在php里也给我们提供了四个常用的数值计算的函数供我们使用. round()四舍 ...

  7. 截断 四舍五入 进位php,PHP取整,四舍五入取整、向上取整、向下取整、小数截取 四舍五入是什么意思 四舍五入就是一个亿 excel数值四舍五...

    PHP取整数函数常用的四种方法: 1.直接取整,舍弃小数,保留整数:intval(): 2.四舍五入取整:round(): 3.向上取整,有小数就加1:ceil(): 4.向下取整:floor(). ...

  8. python显示小数点后几位数_python窗口编程-3:数位处理(整数)

    我们在上一次课程中(python窗口编程-2:风格与布局 ),制作了完整的计算器窗口界面,只是那个窗口没有真正的功能,是点击任何按钮都会关闭.这一次,我们加入一些事件处理的功能,让它成为一个正常工作的 ...

  9. 解决小程序wxml中小数点后的位数问题

    原理:wxml中不能直接使用较高级的js语法,如.toFixed,但可以通过引入wxs模块实现效果 问题描述 : 解决办法 : 1.在该页面文件夹下创建filter.wxs文件 var filters ...

最新文章

  1. mac图标包_Mac 生产力配置手册,从 Homebrew 说开去
  2. MM--移动类型的配置相关的系统表,举例说明SAP是如何根据配置抛帐的
  3. python定义函数的关键字是_python 函数定义
  4. python知识点博客园_python零碎知识点一
  5. 让人期待的2011年度最佳 jQuery 插件发布啦
  6. Spring.NET教程(二十)——整合Quartz.NET(应用篇)
  7. java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例
  8. 细节:关于异步调用的解决方案
  9. 常见机器学习算法分类及名称
  10. 用java有理数类包含加减乘除_用java具体代码实现分数(即有理数)四则运算
  11. 文件和目录(一)--unix环境高级编程
  12. Makefile文件(一)_介绍
  13. uni-app详情页开发
  14. 完整版第四方Oreo易支付源码+28K易支付源码
  15. 集线器、交换机、路由器功能原理入门总结
  16. [转]三大运营商借云转型 虚拟资源池与并发计算是核心能力
  17. 201919102004张雪婷(在虚拟机中安装)
  18. python实用的语法和函数
  19. Eggjs入门系列-基础全面讲解(完结)
  20. 数据挖掘基本流程 CRISP-DM --项目实战总结 可操作性强

热门文章

  1. 你需要了解的55个网络概念
  2. 爱伦·坡:写作的哲学
  3. Flex 布局教程:语法篇
  4. h5 登录页面_鲁班H5作者:@小小鲁班
  5. [评论送书]html+css+js制作旋转爱心
  6. python 如何爬虫wind api数据_Python网络爬虫实战之十:利用API进行数据采集
  7. 计算机选择题在线,计算机考试选择题
  8. 数据库候选关键词怎么求_数据库中,什么是超关键字,候选关键字,主关键字?麻烦举例说明...
  9. MySQL整理-基础知识篇1
  10. 使用OpenCV调用摄像头检测人脸并截图-Python