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

本文主要是介绍python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

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

 

文章目录

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

 

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

方法一:round()函数

其实这个方法不推荐大家使用,查询资料发现里面的坑其实很多,python2和python3里面的坑还不太一样,在此简单描述一下python3对应的坑的情况。

a = 1.23456
b = 2.355
c = 3.5
d = 2.5
print(round(a, 3))
print(round(b, 2))
print(round(c))
print(round(d))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果:

1.235	# 1.23456最终向前进位了
2.35	# 2.355居然没进位
4		# 最终3.5居然变为4了
2		# 最终2.5取值变为2
  • 1
  • 2
  • 3
  • 4
  • (1)通过上面的函数,看着是不是很晕,感觉round(x,n)函数是否进位也没看出是啥规律
  • (2)round(x,n)函数中,是否进位或四舍五入,取决于n位以及n+1位小数的值
  • (3)只有当n+1位数字是5的时候,容易混淆,如果n为偶数,则n+1位数是5,则进位,例如round(1.23456,3)最终变为1.235
  • (4)如果n为奇数,则n+1位是数5,那不进位,例如round(2.355,2),最终为2.35
  • (5)如果n为0,即没有填写n的时候,最终结果与上面相反,即整数部分为偶数的时候,小数位5不进位,例如(round(2.5)变为2)。
  • (6)整数部分为奇数的时候,小数位5进位。(round(3.5)变为4)

看完如上的部分,感觉是不是更晕了,所以round()不推荐使用,目前也不知道设计这个函数的目的在哪里?有谁知道麻烦告知一下?

方法二:’%.2f’ %f 方法

f = 1.23456print('%.4f' % f)
print('%.3f' % f)
print('%.2f' % f)
  • 1
  • 2
  • 3
  • 4
  • 5

结果:

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

具体是否进位,有个概率问题,感兴趣的朋友可以看看评论里面的信息。
感谢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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果:

5.03
3.56
3.54
  • 1
  • 2
  • 3

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



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

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

num = '1234567'		#字符串num
print(num[:3])结果:
123
  • 1
  • 2
  • 3
  • 4
  • 5

如果是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')   # 三个元素的元祖
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

拼接字符串: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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果:

123.45
123.4
  • 1
  • 2

最终版本:

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:

123.45
123.40

round函数的进位方式保证了进位与不进位的概率一样,因为0不存在进位,只有1~9存在,那么如果5固定进位或舍弃的话会导致数据整体偏大或偏小,如此保证了进与舍的值概率相同

 

对结果尽量取偶数,方便计算和存储。 

这篇关于python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393390

相关文章

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(