02-Python 保留指定位数的小数
你好,我是悦创。
学过编程我们都知道,无论什么语言,其实都是相通的,,当我们学会了并掌握好了一种语言后,我们再去了解另外一种语言,其实就很容易了。
1. ''%.2f' %f 方法(推荐)
In [1]: f = 1.23456
In [2]: '%.4f' % f
Out[2]: '1.2346'
In [3]: '%.3f' % f
Out[3]: '1.235'
In [4]: '%.2f' % f
Out[4]: '1.23'
In [5]: # 等价于下面的代码
In [6]: print('%.4f' % f)
1.2346
In [7]: print('%.3f' % f)
1.235
In [8]: print('%.2f' % f)
1.23
提示
这个方法会进行四舍五入。
2. format 函数(推荐)
In [10]: format(1.23456, '.2f')
Out[10]: '1.23'
In [11]: format(1.23456, '.3f')
Out[11]: '1.235'
In [12]: format(1.23456, '.4f')
Out[12]: '1.2346'
In [13]: # 等价于
In [14]: print(format(1.23456, '.2f'))
1.23
In [15]: print(format(1.23456, '.3f'))
1.235
In [16]: print(format(1.23456, '.4f'))
1.2346
提示
这个方法会进行四舍五入。
补充
In [30]: print("{num:.2f}".format(num=0.13333))
0.13
In [31]: print("{num:.2f}".format(num=0.10333))
0.10
In [32]: print("{num:.2f}".format(num=0.10533))
0.11
In [33]: print("{num:.2f}".format(num=0.11533))
0.12
下表展示了 str.format()
格式化数字的多种方法:
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) | 1011 11 13 b 0xb 0XB | 进制 |
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号,如下实例:
print ("{} 对应的位置是 {{0}}".format("aiyc"))
输出结果为:
aiyc 对应的位置是 {0}
3. 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.235 # 1.23456 最终向前进位了
2.35 # 2.355 居然没进位
4 # 最终 3.5 居然变为 4 了
2 # 最终 2.5 取值变为 2
(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。
In [21]: round(2.5)
Out[21]: 2
In [22]: round(3.5)
Out[22]: 4
In [23]: round(4.5)
Out[23]: 4
In [24]: round(5.5)
Out[24]: 6
In [25]: round(6.5)
Out[25]: 6
小结
n 为 0 的时候,奇数向上取整、偶数向下取整。【当然,你也可以理解为 5 进不进位】
(6)整数部分为奇数的时候,小数位 5 进位。( round(3.5)
变为 4)
4. 不进行四舍五入,直接进行截断
(1)可以放大指定的倍数,然后取整,然后再除以指定的倍数。
#保留三位小数截断 python3
print(int(1.23456 * 1000) / 1000 )
(2) 使用字符串截取,截取小数点后指定的位数
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
- 0
- 0
- 0
- 0
- 0
- 0