python 取整_马克的Python学习笔记#数字,日期和时间

b42fa94297b20c7bb2a3991efe13bf78.png

对数值进行调整

在Python中对整数和浮点数进行数字计算是很容易的。但是,如果你需要对分数,数组或者日期和时间进行计算,这就会稍微复杂点。对于简单的取整操作,我们可以使用内建的round(value, ndigits)函数就可,举个例子:

>>> round(1.23, 1)
1.2
>>> round(-1.23, 1)
-1.2
>>> round(1.39, 1)
1.4
>>> round(3.1415926535, 3)
3.142
>>>

当某个值恰好等于两个整数间的一半的时候,取整操作会取到离这个值最近的那个偶数上,并且,传递给round()的参数ndigits可以是负数,在这种情况下会相应的取整邻近位数上,举个例子:

>>> a = 31415926535897932626
>>> round(a, -1)
31415926535897932630
>>> round(a, -1)
31415926535897932630
>>> round(a,-2)
31415926535897932600
>>> round(a, -9)
31415926536000000000
>>>

但是注意,在这种情况下只会输出0.0

>>> a = -3.1415926535897932626
>>> round (a, -1)
-0.0

因为后面那个-1实际上就是取的-3四舍五入就等于0了

注意:在对值进行输出的时候不要把取整和格式化的操作混为一谈。如果将数值以固定的位数输出,一般情况下是用不上round()的,相反,我们只要在格式化时指定所需要的精度就可以了。此外,不要采用对浮点数进行取整的方式来进行修正精度上的问题。对于大部分的涉及浮点数的应用程序来说,一般来讲都没必要,但是如果遇到避免出现误差的行为非常重要,那么就可以考虑使用decimal模块

至于四舍五入的运算在IDE上怎么写,可以参考下这个:

def round_num():print(round(1.23, 1))print(round(1.27, 1))print(round(-1.27, 1))print(round(1.25361,3))# 舍入数为负数a = 1627731print(round(a, -1))print(round(a, -2))print(round(a, -3))# 格式化输出x = 1.23456print(format(x, '0.2f'))print(format(x, '0.3f'))print('value is {:0.3f}'.format(x))# 不要自以为是的用round去修正一些精度问题a = 2.1b = 4.2c = a + bprint(c)c = round(c, 2)  # "Fix" result (???)print(c)if __name__ == '__main__':round_num()

执行精确的小数计算

关于浮点数,有一个所有人都直到的问题就是它们无法精确表达所有的十进制小数位,并且甚至连简单的数学计算也会引入微小的误差。这些误差实际上是由底层CPU的浮点运算单元和IEEE 754浮点算术标准的一种特性,由于Python的浮点类型保存的数据采用的是原始表示形式,因此这种误差是无法避免的,除非你不用float实例。我们目前能做的就是通过decimal模块来加强精度,但这样会牺牲掉一些性能:

>>> from decimal import Decimal
>>> a = Decimal('1.15')
>>> b = Decimal('1.17')
>>> a + b
Decimal('2.32')
>>> print(a + b)
2.32
>>> (a + b) == Decimal('2.32')
True
>>>

Decimal对象能够以任何你所期待的方式来工作,这个模块的主要功能就是允许控制计算过程中的各个方面,这包括数字的位数和四舍五入。

代码示例:

from decimal import Decimal
from decimal import localcontext
import mathdef acc_deciamal():a = 4.2b = 2.1print(a + b)print((a + b) == 6.3)# 使用decimal模块a = Decimal('4.2')b = Decimal('2.1')print(a + b)print((a + b) == Decimal('6.3'))a = Decimal('1.3')b = Decimal('1.7')print(a / b)with localcontext() as ctx:ctx.prec = 3print(a / b)nums = [1.23e+18, 1, -1.23e+18]print(sum(nums))print(math.fsum(nums))if __name__ == '__main__':acc_deciamal()

对数值进行格式化输出

如果我们需要对一个单独的数值做格式化的输出,就像我前几章讲的那样,直接使用内奸函数format()输出就可:

def format_number():x = 1234.56789# Two decimal places of accuracyprint(format(x, '0.2f'))# Right justified in 10 chars, one-digit accuracyprint(format(x, '>10.1f'))# Left justifiedprint(format(x, '<10.1f'))# Centeredprint(format(x, '^10.1f'))# Inclusion of thousands separatorprint(format(x, ','))print(format(x, '0,.1f'))print(format(x, 'e'))print(format(x, '0.2E'))# stringsprint('The value is {:0,.2f}'.format(x))print(format(x, '0.1f'))print(format(-x, '0.1f'))swap_separators = {ord('.'): ',', ord(','): '.'}print(format(x, ',').translate(swap_separators))if __name__ == '__main__':format_number()

对数值做格式化输出通常都是很直接的,上面的例子既可以用于浮点型整数,也可以用于decimal模块中的Decimal对象。当需要限制数值是位数的时候,数值会根据round()函数的规则来进行取整。注意:对数值加上千位分隔符的格式化操作并不是特定于本地的环境的,当然,如果你需要,应该可以用local模块的函数以及用字符串的translate()方法来交换分隔符。

参考书目

《Python CookBook》作者:【美】 David Beazley, Brian K. Jones

Github地址:

yidao620c/python3-cookbook​github.com
838ab09c6a77b5c5d588c651453aed41.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各路由协议的协议号_厂房转让协议

厂房转让协议转让方(甲方)&#xff1a;________________受让方(乙方)&#xff1a;________________甲乙双方本着平等互利的原则&#xff0c;经协商一致就甲方将其权属的工业用地、厂房等转让与乙方及有关事项达成如下协议:一、工业用地及厂房产权基本情况本协议转让的工业用地位…

java web开发常见问题_JavaWeb学习笔记(五)--Web开发其他常见问题

一、把web应用打成war包使用JDK自带jar命令&#xff0c;进入到web应用里面&#xff0c;执行命令&#xff1a;jar -cvf 包名.war . # .表示当前目录所有的文件 直接用jar可查看帮助执行完成后生成一个demo.war文件&#xff0c;把这个文件拷贝到Tomcat的webapps下&#xff0c;Tom…

uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI在机器学习的实践过程中&#xff0c;用好Shell能帮你很多节省时间。最近&#xff0c;有位来自ETHZ的学生分享了一些Shell小技巧。对程序员来说&#xff0c;这些技巧更重要的是让你的思维从琐碎小事中解脱出来&#xff0c;大大提高…

间接寻址级别不同_被遗忘的利息税,国债与存款的利率区别,同大额存单的4点大不同...

2020年6月10日的储蓄式电子国债发行又一次与理财人擦肩而过&#xff0c;因为疫情管控原因&#xff0c;此次暂时不发行&#xff0c;那么下一个认购国债的窗口&#xff0c;就是7月10日&#xff0c;仍然是储蓄式电子国债&#xff0c;期限还是3年期和5年期两种。那么能如期发行吗&a…

抽象类可以用new创建对象吗_宠物可以用人类的湿巾吗?猫咪有泪痕可以用纸巾擦掉吗?...

宠物还有专用的湿巾&#xff1f;当然喽&#xff01;不养宠物的小伙伴可能是无法理解的&#xff0c;人类的生活条件好了&#xff0c;宠物的生活条件在很多方面比人类还更上一层台阶呢&#xff01;喜欢逛宠物店和宠物展的小伙伴都会有这样的感慨&#xff0c;那就是人生不如喵生狗…

java什么时候需要同步_JAVA中线程在什么时候需要同步和互斥

JAVA中线程在什么时候需要同步和互斥关注:265 答案:6 mip版解决时间 2021-01-27 08:10提问者时光易老2021-01-27 03:32JAVA中线程在什么时候需要同步和互斥?(假如这题是考试题&#xff0c;要怎样回答&#xff1f;)详细点最佳答案二级知识专家樱花雨梦2021-01-27 04:13例如访…

5g虚拟技术旅游_5G造就文旅新时代,驴迹科技探索智慧出行创新领域

随着我国5G技术的成熟与普及&#xff0c;5G为文旅产业提供新的解决方案&#xff0c;使之焕发新的活力。以5G“新基建”为依托&#xff0c;结合VR虚拟实境以及云计算、高清视频等技术交叉应用&#xff0c;对旅游业的发展带来广泛而深刻的影响&#xff0c;给游客更新鲜、更具有科…

分块排序算法 java_十大经典排序算法最强总结(含JAVA代码实现)

转载自&#xff1a;https://www.cnblogs.com/guoyaohua/p/8600214.html0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b的前面&#xff1b;不稳定&#xff1a;如…

synchronized锁升级_synchronized详解以及锁的膨胀升级过程

点击上方"码之初"关注&#xff0c;选择"设为星标"与精品技术文章不期而遇来源&#xff1a;www.cnblogs.com/cxiaocai/p/12189848.html架构之路远且艰辛&#xff0c;但是学习的脚步始终不能停止&#xff0c;今天聊一聊synchronized。synchronized是jvm内部的…

改变php二维数组的值_php如何修改二维数组中的值?

php修改二维数组中值的方法&#xff1a;1、通过【for($i 0; $i < count(Array()); $i)】语句修改&#xff1b;2、通过foreach($users as &$user)语句修改。php修改二维数组中值的方法&#xff1a;1、二维数组可以通过for($i 0; $i < count(Array()); $i)这种形式…

jlabel字怎么变化_怎样才能把字写好?详解最科学的练字方法及步骤

一&#xff1a;正确的学习之路1&#xff1a;临帖从古到今&#xff0c;临帖是学习书法最基本的方法&#xff0c;没有一个书法家是没有临过帖的。2&#xff1a;专注专注学一个书法家的字&#xff0c;专心致志&#xff0c;认真临写&#xff0c;持之以恒&#xff0c;直到形同神似。…

找不到具有指定id_JAVA如何整合es指定字段不分词搜索?

一、问题在做一个需求的时候&#xff0c;需要按照电话号码查询用户关系&#xff0c;所以我这边先讲相关信息同步到es&#xff0c;但是电话号码是加密的&#xff0c;所以显示的字符串是杂乱的&#xff0c;既有字母&#xff0c;又有斜杠等号等字符&#xff0c;在进行分词查询的时…

vant 项目_vueCli4+vant+router+vuex+移动端适配

教程的开始 各位同学请先安装node、npm、vuecli4 巴拉巴拉...废话不多说立即开始随便找个地方 cmd&#xff0c;powerShell也可以 命令行走起1. 创建vue项目 随便起个名字就叫my-vue吧&#xff0c;傻瓜式回车键就行&#xff0c;也可以根据自己的喜好选择eslint。vue create my-v…

电路结构原理_精密半波、全波整流电路结构原理图解

利用二极管(开关器件)的单向导电特性&#xff0c;和放大器的优良放大性能相结合&#xff0c;可做到对输入交变信号(尤其是小幅度的电压信号)进行精密的整流&#xff0c;由此构成精密半波整流电路。若由此再添加简单电路&#xff0c;即可构成精密全波整流电路。二极管的导通压降…

vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?

很多数据分析师在简历上都会说自己熟悉excel&#xff0c;但熟练使用excel必须要掌握的核心函数vlookup首当其冲&#xff0c;其次是sumifs、match、index等等。就算熟悉vlookup&#xff0c;很多人也只会基础的单条件查找&#xff0c;其实在工作中能用到vlookup的地方有很多&…

matlab 绘制符号函数,DAY8 MATLAB学习笔记—simulink入门、MATLAB符号函数的图形绘制...

如何打开simulink&#xff1a;启动simulink&#xff1a;先打开MATLAB软件界面第一步打开simulink第二步在command windows输入 simulink然后enter&#xff0c;等待有很多模块库第三步&#xff1a;常用的simulink库打开以后会看到simulink library browser这个界面最常用的就是s…

后盾网php多少钱_商标转让做公证花多少钱-购店网

当别人对您的商标感兴趣&#xff0c;或者您想买属于自己的商标时&#xff0c;转让商标是个好主意。但不了解商标转让流程的朋友&#xff0c;可能会担心自己对商标公证书的作用缺乏了解。所以今天我们给大家介绍一下什么是商标转让公证的用途&#xff0c;具体什么是商标公证。想…

MATLAB求线性代数的参数范围,MATLAB科学计算04(线性代数问题求解一)

文章目录特殊矩阵矩阵的基本概念求解线性方程组直接求解判定求解特殊矩阵零矩阵、1矩阵及单位矩阵生成nxn方阵&#xff1a;Azeros(n), Bones(n), Ceye(n)生成mxn矩阵&#xff1a;Azeros(m,n), Bones(m,n), Ceye(m,n)生成和矩阵B同样位数的矩阵&#xff1a;Azeros(size(B))**生成…

wsl 重启_漫谈在Windows Server 2019中安装使用WSL

熟悉IT历史的朋友一定不会忘记98蓝屏事件&#xff1a;时任微软CEO的比尔盖茨和助理 Chris Capossela在1998年春季计算机分销商展会&#xff08;COMDEX &#xff09;现场演示Windows 98的“即插即用”&#xff08;plug-and-play&#xff09;新特性时&#xff0c;经历了演示计算机…

uniapp 输入框防抖节流_拉动一下控制台大小,后台请求数量爆炸,竟是没做好防抖与节流...

点击上方☝Java编程技术乐园&#xff0c;轻松关注&#xff01;及时获取有趣有料的技术文章文章很好&#xff0c;耐心阅读&#xff0c;记得点赞和关注哦~前言最近有个朋友在面试过程中遇到一个问题&#xff1a;什么是防抖和节流&#xff1f;糟了&#xff0c;这可触碰到我的知识盲…