控制Python浮点数输出位数的操作方法

目录
  • 技术背景
  • 常规控制方法
  • 取有效数字
  • 总结概要

在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浮点数输出位数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python如何执行精确的浮点数运算

    问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数. 并且,即使是最简单的数学运算也会产生小的误差,比如: >>> a = 4.2 >>> b = 2.1 >>> a + b 6.300000000000001 >>> (a + b) == 6.3 False >>> 这些错误是由底层CPU和IEEE 754标准通过自己的浮点单位去执行

  • python输入一个水仙花数(三位数) 输出百位十位个位实例

    我就废话不多说了,大家还是直接看代码吧! # python输入一个水仙花数(三位数) 输出百位十位个位 """ 从控制台输入一个三位数num, 如果是水仙花数就打印num是水仙花数, 否则打印num不是水仙花数 """ """ 任务: 1.定义变量num用于存放用户输入的数值 2.定义变量gw.sw.bw分别用于存放输入的三位数的个位,十位,百位 3.定义变量total,用于存放各位数字立方和 4.用if语句判断各位

  • python中精确输出JSON浮点数的方法

    有时需要在JSON中使用浮点数,比如价格.坐标等信息.但python中的浮点数相当不准确, 例如下面的代码: 复制代码 代码如下: #!/usr/bin/env python import json as json data = [ 0.333, 0.999, 0.1 ]print json.dumps(data) 输出结果如下: 复制代码 代码如下: $ python floatjson.py[0.33300000000000002, 0.999, 0.10000000000000001] 能

  • 聊聊Python中的浮点数运算不准确问题

    大家好,老 Amy 来了.之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家叭~ 啥问题呢?请看题: 也就是说,需要大家计算1.1-1的值,很多朋友会说:"emmm-这还不简单,玩我呢?不就是0.1嘛" 但是如果你用 python 去执行一下,会发现结果跟你想的不太一样,如下图: 这样大家是不是发现了什么问题?是的,浮点数在运算过程中并没有保证完全精确,是什么原因导致了这种现象呢?很多朋友就会窃喜:"这不就是 Python 的 bug 嘛~&q

  • 控制Python浮点数输出位数的操作方法

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

  • Python浮点数取整、格式化和NaN处理的操作方法

    目录 1. 取整的三种方法 1.1 强转int类型 1.2 采用math.ceil和math.floor 1.3 采用round 2. 格式化浮点数输出 3. 执行精确的小数计算 4. 无穷大.负无穷大和NaN的判断测试 参考 强转int类型会直接对浮点数的小数部分进行截断(无论是正还是负).还有一种方法是math.ceil和math.floor.无论是正数还是负数,都遵循:ceil往数轴正方向取整,floor往数轴负方向取整.round原型为round(value, ndigits),可以将一

  • 全网最细 Python 格式化输出用法讲解(推荐)

    一.使用 print() 函数 在 Python 中,print() 函数支持格式化输出,与 C 语言的 printf 类似. 1. 格式化输出字符串和整数 [示例1]输出字符串 AmoXiang,并计算.输出它的字符长度 str1 = "%s.length = %d" % ("AmoXiang", len("AmoXiang")) print(str1) # 输出AmoXiang.length = 8 % 在字符串中表示格式化操作符,它后面必须

  • Python格式化输出详情

    目录 1.%格式化 1.1简单格式化,不使用可选参数 1.2 复杂格式化,使用可选参数 1.2.1参数 (name),用于选择指定的key 1.2.2参数flags和width,对齐方式和宽度 1.2.3参数.precision 控制小数点后位数 2.format格式化 2.1自定义占位符 2.2自定义关键字 2.3填充与对齐(同时使用) 2.4数字格式化 3.f-String格式化 3.1简单使用 3.2复杂控制 1.%格式化 语法: %[(name)][flags][width].[prec

  • 对python的输出和输出格式详解

    输出 1. 普通的输出 # 打印提示 print('hello world') 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') print()函数也可以接受多个字符串,用逗号","隔开,就可以连成一串输出: >>> print('The quick brown fox', 'jumps over', 'the lazy dog

  • Python格式化输出%s和%d

    本文介绍了Python格式化输出%s和%d的实例案例.分享给大家供大家参考,具体如下: python print格式化输出 1. 打印字符串 print ("His name is %s"%("Aviad")) 效果: 2.打印整数 print ("He is %d years old"%(25)) 效果: 3.打印浮点数 print ("His height is %f m"%(1.83)) 效果: 4.打印浮点数(指定保留

  • Python图片处理模块PIL操作方法(pillow)

    一.PIL的基本概念: PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和滤波器(filters). 1.通道 每张图片都是由一个或者多个数据通道构成.PIL允许在单张图片中合成相同维数和深度的多个通道. 以RGB图像为例,每张图片都是由三个数据通道构成,分别为R.G和B通道.而对于灰度图像,则只有一个通道. 对于一张图片的通道数量和名称,可以通过方法getban

  • python格式化输出%s与format()的用法对比

    目录 1.python格式化输出历史起源 2.为什么要学习python3支持的新式格式化输出呢? 3.基本用法 format()支持位置格式化填充,%s不支持: 4.填充和对齐 1)填充(只能用一个字符进行填充) 2)对齐 5.截断 6.格式化输出中,与数字相关的语法 1)引入案例 2)填充整数,使用d 3)填充浮点数,使用f(这个才是最常用的,用于保留小数点的位数): 1.python格式化输出历史起源 python2.5之前,我们使用的是老式格式化输出:%s.从python3.0开始起(py

  • python格式化输出实例(居中、靠右及靠左对齐)

    目录 format 方式 其他扩展写法 '%' 方式 总结 format 方式 {: >} 靠右对齐 print('{0:>5}'.format('aa')) # 占5个字符空间,0是format参数中的变量索引 >> ' aa' {: <} 靠左对齐 print('{0:<5}'.format('aa')) # 占5个字符空间,0是format参数中的变量索引 >> 'aa ' {:^} 居中对齐 print('{0:^5}'.format('aa'))

  • Python格式化输出的具体实现

    目录 “%”的使用 字符串输出(%s) 浮点数输出(%f) format的使用 位置匹配 格式转换 高阶用法 format变形用法 “%”的使用 格式符 描述 %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符及其ASCII码 %u 整数(无符号) %b 二进制整数 %o 八进制数(无符号) %d 十进制整数 %i 十进制整数 %x 十六进制数(无符号) %X 十六进制数大写(无符号) %e 指数 (基底写为e),用科学计数法格式化浮点数 %E 指数

随机推荐