在python的输出结果中,尤其是浮点数的输出,当我们需要写入文本文件时,最好是采用统一的输出格式,这样也能够增强结果的可读性。而对于浮点数输出位数的控制,可以通过{:.4f}、%.4f来指定打印或者输出时的字符串占据空间,也可以通过round函数来对输出前的结果进行转化。而如果是取有效数字,需要用到{:.4},这几种方法没有优劣,只有看不同的场景,选取不同的精度控制方案。

技术背景

在Python的一些长效任务中,不可避免的需要向文本文件、二进制文件或者数据库中写入一些数据,或者是在屏幕上输出一些文本,此时如何控制输出数据的长度是需要我们注意的一个问题。比如对于一个二进制文件,如果输出的浮点数长度一直在发生变化,则写入到文件之后,读取的人按照比特位进行读取就会读到一堆错误的数据。因此,我们需要控制输出位数,尤其是浮点数要格外小心。

常规控制方法

一般情况下,我们可以通过round来设置输出浮点数的有效数字,其原理是对于一个给定的浮点数直接取前n位的有效数字,后续的数字四舍五入。而%.4f{:.4f}这两种格式化,是在输出时取小数点后4位打印,跟先取有效数字再打印是不一样的,后面会提到。先看下这几个方式的输出异同点:

In [1]: pi_10=31.415926

In [2]: print (round(pi_10,4))
31.4159

In [3]: print ('%.4f' % pi_10)
31.4159

In [4]: print ('{:.4f}'.format(pi_10))
31.4159

上面的例子是小数点前和小数点后都有多位数字,另外类似的可以看下小数点前只有0的数字的输出结果:

In [5]: pi_10=0.31415926
In [6]: print (round(pi_10,4))
0.3142
In [7]: print ('{:.4f}'.format(pi_10))
0.3142
In [8]: print ('%.4f' % pi_10)
0.3142

在上面的两个案例中,我们发现三者的输出结果都是一样的。但是前面提到了先取有效数字再输出,跟先输出再取有效数字的区别,可以通过下面的一个案例体现出来:

In [9]: pi_10=3.1415926E-08
In [10]: print (round(pi_10,4))
0.0
In [11]: print ('{:.4f}'.format(pi_10))
0.0000
In [12]: print ('%.4f' % pi_10)
0.0000

这里的输入是一个小数点后有很多0的浮点数,但是这里用的是科学计数法,也就是\(3.1415926*10^{-8}\),此时我们用这三种输出方式,得到的结果全都是0,而且第一种方案更是直接小数点后都没满4位。这是因为在用round取有效数字时,发现小数点后的数字太多,把当前的浮点数直接当成了0.0而不是0.0000,而后面两个方案的过程更像是在打印出来这个数字之后,再把超过有效位数的数字去掉,因此会保留小数点后的4个0。但是,即使如此,得到的结果也不是我们所想要的结果。因为这个数字虽然很小,但是可能只是由于单位问题,并不代表这个数字产生的影响就是0,因此直接用这种取小数点后有效数字的方法可能会出问题。

取有效数字

这里我们要介绍的取有效数字的方法,不再是去小数点后的有效数字,而是整体的有效数字。方法也很简单,就是把上一个章节中的{:.4f}改成{:.4},同样的可以通过这么几个案例来理解控制有效数字的结果:

In [13]: pi_10=3.1415926E-08
In [14]: print ('{:.4}'.format(pi_10))
3.142e-08
In [15]: pi_10=0.31415926
In [16]: print ('{:.4}'.format(pi_10))
0.3142
In [17]: pi_10=31.415926
In [18]: print ('{:.4}'.format(pi_10))
31.42

我们发现,输出的结果会根据输入的格式改变而改变,如果输入的小数位0过多,输出结果会被自动转换成科学计数法。而不仅仅是针对浮点数,{:.4}还可以作用在字符串中,效果如下:

In [19]: string='Hello World!'

In [20]: print ('{:.4}'.format(string))
Hell

总结概要

在python的输出结果中,尤其是浮点数的输出,当我们需要写入文本文件时,最好是采用统一的输出格式,这样也能够增强结果的可读性。而对于浮点数输出位数的控制,可以通过{:.4f}、%.4f来指定打印或者输出时的字符串占据空间,也可以通过round函数来对输出前的结果进行转化。而如果是取有效数字,需要用到{:.4},这几种方法没有优劣,只有看不同的场景,选取不同的精度控制方案。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/fprint.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

到此这篇关于控制Python浮点数输出位数的文章就介绍到这了,更多相关Python浮点数输出位数内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

控制Python浮点数输出位数的操作方法的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. xcode – Interface Builder的用户定义的运行时属性不接受浮点数?

    我创建了一个具有float属性的NSView子类,我想在InterfaceBuilder中设置它.在用户定义的运行时属性部分中,唯一合适的类型是数字.但是,如果我想输入一个十进制数,它只是舍入到最接近的整数.这是一个bug还是故意的?解决方法使用字符串类型并输入您的值

  3. 一 Swift学习之基础部分

    **一Swift学习之基础部分————–借鉴老码团队翻译组-Tyrion**//1.1常量和变量letsum=0//声明常量,值不可修改varnumber=1//声明变量,值可修改varx=0.0,y=1.0,z=2.0//在一行声明多个常量或变量用逗号隔开//1.2类型标注//声明常量或变量时可以加上类型标注,表示这个常量或变量存储的类型,但是如果你没有添加类型,而是赋了初始值,swift会自己推断类型letnum:Int=0varstr:String?Swift提供了两种有符号浮点数类型:Double

  4. Swift语法基础:8 - Swift的常量, 变量, 标注, 命名, 输出, 注释, 分号, 整数, 浮点数, 类型安全和类型推测说明

    Swift是一门新的语言,由于前期稳定性不够,所以导致会有一定的语法差异,有些人看到中文翻译过来的文档,和在Xcode里实现的不一样,就会各种找答案,找问题,我之所以会把我学习Swift遇到的问题共享出来,一方面是为了方便某人不愿意查看英文文档的朋友,另一方面就是为了给我自己做总结,是我在Xcode中一一试过,没有出现问题的我才会发出来,以后也会如此,直到Swift完全成熟稳定了,那我就以最后一个

  5. Swift语法基础:11 - Swift的运算术语, 赋值运算, 数值运算, 复合赋值

    在Swift当中当然是有与或非这三个逻辑运算符,并且兼容大部分C类运算符,比如“”,“=”,“==”,“=”,“+”,“-“,“*”,“/”,这些等等都支持,但这里有一点要注意一下,赋值符号“=”不返回值,以防止把“==”写成“=”导致程序出错.区别于C,Swfit还提供对浮点数类型进行取余预算“%”,还提供了C没有提供的区间,“0..

  6. Swift教程10-运算符与C语言的不同

    =,==这些运算符和其他语言的类似,是比较前后两个值是否相等,或者大小关系比较字符串内容是否相等,使用==即可但是Swift新增了===恒等于,是针对于引用类型,如两个对象之间是否是同一个对象与之对应的是!运算符示例Swift新增的??

  7. Swift学习:2.整型于浮点数

    整数整数范围你可以访问不同整数类型的min和max属性来获取对应类型的最大值和最小值:Int一般来说,你不需要专门指定整数的长度。Swift提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:在32位平台上,Int和Int32长度相同。浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift提供了两种有符号浮点数类型:Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。Float表示32位浮点数。

  8. [翻译]Swift编程语言——基本操作符

    基本操作符操作符就是一个简单的符号或者短语,你可以用他们来检查、改变、组合数据。Swift支持标准C的大多数操作符而且有若干改进可以避免代码错误。算数运算符会检测并且不接受溢出的数据,你可以选用Swfit的溢出操作符预防这种情况出现。像C一样,Swift允许你对浮点数取余,同时Swfit也提供了两个C没有的范围操作符(a..术语操作符有一元、二元以及三元的:一元操作符只有一个操作对象(比如-a)。

  9. 【swift_1】swift基本语法及事例Demo

    语法类的文档网上比较多,我这里参考:Swift基本语法事例Demo:链接:http://pan.baidu.com/s/1jGCINCq密码:5mdk语法须知2个不需要不需要编写main函数:全局作用域中的代码会被自动当做程序的入口点(从上往下执行)不需要在每一条语句后面加上分号letradius=10你喜欢的话,也可以加上letradius=10;有一种情况必须加分号:同一行代码上有多条语句时1

  10. swift 基础笔记

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部