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生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注