Python保留指定位数的小数
** 1、’%.2f ’ % f 方法(推荐)
2、format函数(推荐)
3、round()函数
4、步进行四舍五入,直接进行截断**
1 ’ %.2f ’ % f方法(推荐)
// An highlighted block
f = 1.23456
print('%.4f' % f) >1.2346
print('%.3f' % f) >1.235
print('%.2f' % f) >1.23
2 format函数(推荐)
// An highlighted block
print(format(1.23456, '.2f')) >1.23
print(format(1.23456, '.3f')) >1.235
print(format(1.23456, '.4f')) >1.2346
这个方法会进行四舍五入
3 round()函数
该方法不推荐大家使用,存在大量的坑…
// An highlighted block
a = 1.23456
b = 2.355
c = 3.5
d = 2.5
print(round(a,3)) >1.235 这里四舍五入了
print(round(b,2)) >2.35 这里居然没四舍五入
print(round(c)) >4 这里3.5变成4了
print(round(d)) >2 这里2.5居然变成2了
4 不进行四舍五入,直接进行截断
1)可以放大指定的倍数,然后取整,然后再除以指定的倍数;
// An highlighted block
//保留三位小数截断 python3
print(int(1.23456 * 1000) / 1000) >1.234
2)使用字符串截取,截取小数点后指定的位数
// An highlighted block
num = '123456' //字符串num
print(num[:3]) >123
如果是1.23456取2位小数(截取2位小数),只需要把小数点右边的当作字符串截取即可
partition()函数:将字符串根据字符切割
// An highlighted block
num = '1.23456' //字符串num
num_str = num.partition('.')
print(num_str) >('1','.','23456') //三个元素的元组
拼接字符串:format函数的使用
方法一:
// An highlighted block
def get_two_float(f_str,n):
a,b,c = f_str.partition('.')
c = c[:n]
return '.'.join([a,c])
num = '1.23456' //(1)隐患1:传入函数的是字符串
print(get_two_float(num,2)) >1.23
num2 = '1.2' //(2)隐患2:传入的字符串小数位小于最终取的位数
print(get_two_float(num2,2)) >1.2
最终版本:
// An highlighted block
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位小数0
return '.'.join([a,c])
num = 1.23456
print(get_two_float(num,2)) >1.23
num2 = 123.4
print(get_two_float(num2,2)) >123.40
Python字符串格式化 (%、format)
Python在字符串格式化的两种方法
- %
- format
format格式化输出
相对基本格式化输出采用%的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号{}作为特殊字符代替%
1、format,位置匹配(最常用)
- 不带编号,即{}
- 带数字编号,可调换顺序,即{1},{2}(参数从0开始编号)
- 带关键字,即{name}
字符串类型格式化采用format()方法,基本使用格式是;
<模板字符串>.format(<逗号分隔的参数>)
调用format()方法后会返回一个新的字符串,参数从0开始编号;
format()方法可以非常方便的连接不同类型的变量或内容
// An highlighted block
"{}:计算机{}的CPU 占用率为{}%。".format("2016-12-31","python",10)
>> '2016-12-31:计算机python的CPU 占用率为10%。'
// An highlighted block
'圆周率{1}是{2}{0}'.format('...',3.1415926,'无理数',)
>> '圆周率3.1415926是无理数...'
// An highlighted block
'今天是{name}的{key}生日会'.format(22,11,name = '帅哥',key = 18)
>>'今天是帅哥的18生日会'
'今天是{name}的{key}生日会,接着上{}'.format('test',name = '帅哥',key = 18)
>>'今天是帅哥的18生日会,接着上test'
// 以下会报错
'今天是{name}的{key}生日会,接着上{}'.format(name = '帅哥',key = 18,'test')
"今天是{0}的{}生日会".format("帅哥", 18)
小结:
- 当你只写了{}时,默认按传入的值的顺序读取
- 当你写了数字编号{1},则可以读取对应位置商的值,从0开始
- 当你指定了关键字{name},如果不指定name = xxx,则会报错
- 当你指定了关键字,又只写了{}时,传入的带有关键字指定的值必须写在后面,类似函数(形参在前,实参在后)
- {}和{1}是不能共存的
- 当用到format时,一个字符串里面的格式化输出只用一种方式,不要混合使用,容易出问题,而且没有必要
2、format,指定数据类型输出
print("整数{:d}".format(123)) >>整数123
print("浮点数{:5.2f}".format(123.19)) >>浮点数123.19
print("字符串{:s}".format('123')) >>字符串123
print("八进制{:o}".format(12)) >>八进制14
print("十六进制{:x}".format(13)) >>十六进制d
小结:
- 如果指定了:s,则只能传字符串值,如果传其他类型值不会自动转换;
- 当不指定类型时,传任何类型都能成功,如无特殊必要,可以不用指定类型;
- 如果要结合数字编号和关键字使用可以如下:
// An highlighted block
print('关键字 {num :d}'.format(num=123)) >关键字 123
print('数字编号 {0:d},{1:s}'.format(123,'123)) >数字编号 123,123
3、format,位数补齐
// An highlighted block
print('默认左对齐,宽度为10,不足补空格:{:10}'.format('123'),'end')
print('左对齐,宽度为10,不足补空格:{:<10}'.format('123'),'end')
print('右对齐,宽度为10,不足补空格:{}{:>10}'.format('start','123'))
print('右对齐,宽度为10,取两位小数,不足补0:{:0>10.2f}'.format(222.225))
// 执行结果
默认左对齐,宽度为10,不足补空格:123 end
左对齐,宽度为10,不足补空格:123 end
右对齐,宽度为10,不足补空格:start 123
右对齐,宽度为10,取两位小数,不足补0:0000222.22
小结:
- 默认左对齐就可以不用加<
- 当不指定数据类型时,传什么类型的值都能成功格式化输出
4、format,拓展使用
// An highlighted block
print("总是显示符号:{:0>+8.2f},{:0>+8.2f}".format(3.14, -3.14))
print("百分数:{:%} {:.2%}".format(3 / 7, 3 / 7))
print("逗号分隔,一般用在金钱 {:,}".format(12345678)
//执行结果
总是显示符号:000+3.14,000-3.14
百分数:42.857143% 42.86%
逗号分隔,一般用在金钱 12,345,678
小结:
- +的意义在于,当我们输出的是正数也能看到符号;
- 百分数是真的百分数,不单单是加个%;
- 固定隔三位数字,传入字符串会报错