我想要显示:
49
为49.00
和
54.9
为54.90
无论小数的长度或是否有小数位,我都希望显示一个带有2位小数的Decimal
,我想以有效的方式完成。目的是显示货币价值。
例如,4898489.00
答案 0 :(得分:433)
您应该使用new format specifications来定义您的值的表示方式:
>>> from math import pi # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'
文档有时可能有点迟钝,因此我建议使用以下更易读的引用:
.format()
字符串格式%
字符串格式与新式.format()
字符串格式进行比较Python 3.6引入了literal string interpolation(也称为f-strings)所以现在你可以将上面的内容写得更简洁:
>>> f'{pi:.2f}'
'3.14'
答案 1 :(得分:132)
Python文档的String Formatting Operations部分包含您正在寻找的答案。简而言之:
"%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'
答案 2 :(得分:95)
我想你可能正在使用Decimal()
模块中的decimal
个对象? (如果您需要精确到两位数以上的小数点以及任意大数字的精度,那么你肯定应该这样,这就是你的问题的标题所暗示的......)
如果是这样,文档的Decimal FAQ部分会有一个问题/答案对,可能对您有用:
Q值。在具有两个小数位的定点应用程序中,某些输入具有许多位置并需要舍入。其他人不应该有多余的数字,需要进行验证。应该使用哪些方法?
一个。 quantize()方法舍入到固定数量的小数位。如果设置了Inexact陷阱,它对验证也很有用:
>>> 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
下一个问题是
Q值。一旦我有有效的两位输入,我如何在整个应用程序中保持该不变量?
如果您需要答案(以及许多其他有用信息),请参阅the aforementioned section of the docs。此外,如果你保持Decimal
s的精度超过小数点两位数(意味着保持小数点左边所有数字和左边两个数字所需的精度,并且不再有...),然后将它们转换为str
的字符串将正常工作:
str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'
答案 3 :(得分:29)
您可以使用string formatting operator:
num = 49
x = "%.2f" % num # x is now the string "49.00"
我不确定“高效”是什么意思 - 这几乎可以肯定不是你应用程序的瓶颈。如果您的程序运行缓慢,请首先对其进行分析以找到热点,然后对其进行优化。
答案 4 :(得分:22)
>>> print "{:.2f}".format(1.123456)
1.12
您可以将2
中的2f
更改为您想要显示的任意小数点数。
从Python3.6
开始,转换为:
>>> print(f"{1.1234:.2f}")
1.12
答案 5 :(得分:19)
.format是一种更易读的处理变量格式的方法:
'{:.{prec}f}'.format(26.034, prec=2)
答案 6 :(得分:6)
如果您有多个参数可以使用
print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
>>> some string 1.12 & 2.35
答案 7 :(得分:6)
在python 3中,一种实现方法是
'{0:.2f}'.format(number)
答案 8 :(得分:3)
如果您将其用于货币,并且还希望将值与,
分开,则可以使用
$ {:,.f2}.format(currency_value)
。
例如:
currency_value = 1234.50
$ {:,.f2}.format(currency_value)
-->
$ 1,234.50
这是我前一段时间写的一些代码:
print("> At the end of year " + year_string + " total paid is \t$ {:,.2f}".format(total_paid))
> At the end of year 1 total paid is $ 43,806.36
> At the end of year 2 total paid is $ 87,612.72
> At the end of year 3 total paid is $ 131,419.08
> At the end of year 4 total paid is $ 175,225.44
> At the end of year 5 total paid is $ 219,031.80 <-- Note .80 and not .8
> At the end of year 6 total paid is $ 262,838.16
> At the end of year 7 total paid is $ 306,644.52
> At the end of year 8 total paid is $ 350,450.88
> At the end of year 9 total paid is $ 394,257.24
> At the end of year 10 total paid is $ 438,063.60 <-- Note .60 and not .6
> At the end of year 11 total paid is $ 481,869.96
> At the end of year 12 total paid is $ 525,676.32
> At the end of year 13 total paid is $ 569,482.68
> At the end of year 14 total paid is $ 613,289.04
> At the end of year 15 total paid is $ 657,095.40 <-- Note .40 and not .4
> At the end of year 16 total paid is $ 700,901.76
> At the end of year 17 total paid is $ 744,708.12
> At the end of year 18 total paid is $ 788,514.48
> At the end of year 19 total paid is $ 832,320.84
> At the end of year 20 total paid is $ 876,127.20 <-- Note .20 and not .2
答案 9 :(得分:2)
OP 总是想要两位小数显示,所以像所有其他答案一样显式调用格式化函数还不够好。
正如其他人已经指出的那样,Decimal
适用于货币。但是 Decimal
显示所有小数位。因此,覆盖其显示格式化程序:
class D(decimal.Decimal):
def __str__(self):
return f'{self:.2f}'
用法:
>>> cash = D(300000.991)
>>> print(cash)
300000.99
简单。
答案 10 :(得分:1)
这与您可能已经看到的解决方案相同,但是通过这种方式可以更清楚:
>>> num = 3.141592654
>>> print(f"Number: {num:.2f}")
答案 11 :(得分:0)
最简单的方法示例:
代码:
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
`
输出:正确答案:88.64%
答案 12 :(得分:-5)
怎么样
print round(20.2564567 , 2) >>>>>>> 20.25
print round(20.2564567 , 4) >>>>>>> 20.2564