如何格式化小数点总是显示2个小数位?
我想显示:
49
为49.00
和:
54.9
为54.90
无论小数点的长度还是小数位数,我都希望显示一个有2位小数的小数位数,我想以一种有效的方式来实现。 目的是显示货币价值。
例如4898489.00
我想你可能使用decimal
模块中的Decimal()
对象? (如果你需要精确的两位数的精度超过小数点以上任意大的数字,你绝对应该是,这就是你的问题的标题build议…)
如果是这样,文档的小数常见问题部分有一个问题/答案对可能对您有用:
问:在小数点后两位的定点应用程序中,某些input有许多地方需要四舍五入。 其他人不应该有超过数字,需要validation。 应该使用什么方法?
答:量化()方法四舍五入到固定的小数位数。 如果设置了不确定陷阱,那么validation也是有用的:
>>> TWOPLACES = Decimal(10) ** -2 # same as Decimal('0.01') >>> # Round to two places >>> Decimal('3.214').quantize(TWOPLACES) Decimal('3.21') >>> # Validate that a number does not exceed two places >>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact])) Decimal('3.21') >>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact])) Traceback (most recent call last): ... Inexact: None
接下来的问题是
问:一旦我有有效的两个地方的投入,如何保持整个应用程序不变?
如果你需要的答案(以及其他许多有用的信息),请参阅文档的上述部分 。 此外,如果您保留Decimal
两位数的精度(意味着保留小数点左边的所有数字和右边的两个数字所需的精度) ,然后将它们转换为str
将正常工作:
str(Decimal('10')) # -> '10' str(Decimal('10.00')) # -> '10.00' str(Decimal('10.000')) # -> '10.000'
您应该使用新的格式规范来定义您的值应该如何表示:
>>> from math import pi # pi ~ 3.141592653589793 >>> '{0:.2f}'.format(pi) '3.14'
这个文档有时候可能会有些迟钝,所以我推荐下面的,更易读的参考:
- Pythonstring格式指南 :显示新样式
.format()
string格式的示例 - pyformat.info :比较旧式
%
string格式与新式.format()
string格式
Python 3.6引入了文字string插值 (也称为f-string),所以现在你可以把上面的内容写得更加简洁:
>>> f'{pi:.2f}' '3.14'
Python文档的string格式化操作部分包含您正在查找的答案。 简而言之:
"%0.2f" % (num,)
一些例子:
>>> "%0.2f" % 10 '10.00' >>> "%0.2f" % 1000 '1000.00' >>> "%0.2f" % 10.1 '10.10' >>> "%0.2f" % 10.120 '10.12' >>> "%0.2f" % 10.126 '10.13'
你可以像这样使用string格式化操作符 :
num = 49 x = "%.2f" % num # x is now the string "49.00"
我不确定“高效”是什么意思 – 这几乎肯定不是您应用程序的瓶颈。 如果您的程序运行缓慢,请首先对其进行分析以find热点,然后对其进行优化。
.format是处理variables格式的更可读的方式:
'{:.{prec}f}'.format(26.034, prec=2)
>>> print "{:.2f}".format(1.123456) 1.12
您可以将2f
2
更改为您要显示的任意小数点数。
如果你有多个参数你可以使用
print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345)) >>> some string 1.12 & 2.35
关于什么
print round(20.2564567 , 2) >>>>>>> 20.25 print round(20.2564567 , 4) >>>>>>> 20.2564
- 如果range()是Python 3.3中的一个生成器,为什么我不能在一个范围内调用next()?
- python将本地时间string转换为UTC时代时间戳
- 如何从Python中的string中提取子string?
- 什么是实现__hash __()的正确和好方法?
- 在Python中计算numpy ndarraymatrix中的非NaN元素的数量
- 当在Python中分割一个空string时,为什么split()返回空列表而split('\ n')返回?
- 如何使用JDBC源在(Py)Spark中写入和读取数据?
- 即使模板文件存在,Flask仍会引发TemplateNotFound错误
- 如何激活Anaconda环境