Python教程

Python保留指定位数的小数

本文主要是介绍Python保留指定位数的小数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

小结:

  • +的意义在于,当我们输出的是正数也能看到符号;
  • 百分数是真的百分数,不单单是加个%;
  • 固定隔三位数字,传入字符串会报错
这篇关于Python保留指定位数的小数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!