我要显示:
49
如 49.00
和:
54.9
如 54.90
不管小数长度或是否有小数位,我都希望显示一个Decimal
带有2个小数位的a,并且我想以一种有效的方式来做到这一点。目的是显示货币值。
例如, 4898489.00
我要显示:
49
如 49.00
和:
54.9
如 54.90
不管小数长度或是否有小数位,我都希望显示一个Decimal
带有2个小数位的a,并且我想以一种有效的方式来做到这一点。目的是显示货币值。
例如, 4898489.00
Answers:
我想您可能正在使用模块中的Decimal()
对象decimal
?(如果您需要精确到小数点后两位精确到两位数且任意大的数字,那么绝对应该如此,这就是您的问题标题所暗示的……)
如果是这样,文档的“ 十进制常见问题解答”部分将包含一个问题/答案对,这可能对您有用:
问:在具有两位小数位的定点应用程序中,某些输入有很多位,需要四舍五入。其他人不应有多余的数字,需要进行验证。应该使用什么方法?
答:Quantize()方法将舍入到固定数量的小数位数。如果设置了不精确陷阱,则它对于验证也很有用:
>>> 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
下一个问题是
问:一旦有了有效的两个位置输入,如何在整个应用程序中保持不变?
如果您需要答案(以及许多其他有用的信息),请参阅docs的上述部分。另外,如果您将Decimal
s的精度保持在小数点后两位(这意味着要使所有数字保持在小数点的左边,而使所有数字保持在小数点的右边,并且不多...),然后将它们转换为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'
该文档有时可能有点晦涩难懂,所以我建议您使用以下更容易阅读的参考文献:
.format()
字符串格式化%
字符串格式和新式.format()
字符串格式Python 3.6引入了文字字符串插值(也称为f字符串),因此现在您可以将上面的内容写得更简洁:
>>> f'{pi:.2f}'
'3.14'
format
没有返回str
,而不是一个float
:print type({0:.2f}".format(pi))
退货<type 'str'>
。
return
。请在头脑上将其更改为print
s。
"{:.2f}".format(pi)
0:
办?我假设它.
是python字符串的一部分
Python文档的“ 字符串格式操作”部分包含您要寻找的答案。简而言之:
"%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'
0
after %
,也不需要包装num
在tuple
。
r = 1; "%s" % r; r = (1, 2); "%s" % r
与r = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)
。因此,Python中最复杂的编码样式现在使用无条件元组(并且Python 3不推荐使用整个字符串格式化方法,因为它易于出错)。
您可以这样使用字符串格式运算符:
num = 49
x = "%.2f" % num # x is now the string "49.00"
我不确定“高效”是什么意思-几乎可以肯定这不是应用程序的瓶颈。如果您的程序运行缓慢,请先对其进行分析,以找到热点,然后对其进行优化。
>>> print "{:.2f}".format(1.123456)
1.12
您可以更改2
在2f
任意数量的要显示小数点。
从Python3.6
,这意味着:
>>> print(f"{1.1234:.2f}")
1.12
.format是处理变量格式的更易读的方法:
'{:.{prec}f}'.format(26.034, prec=2)
在python 3中,一种方法是
'{:.2f}'.format(number)
如果您将其用作货币,并且还希望将值与分隔,则,
可以使用
$ {:,.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
向您展示如何做到这一点的最简单方法示例是:
代码:
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
`
输出:正确答案:88.64%
关于什么
print round(20.2564567 , 2) >>>>>>> 20.25
print round(20.2564567 , 4) >>>>>>> 20.2564