我使用以下代码片段将比率转换为百分比:
"{:2.1f}%".format(value * 100)
这可以按您期望的那样工作。我想将其扩展为在四舍五入的比率为0或1(但不完全是)的情况下提供更多信息。
是否有更Python的方式(也许使用format
函数)来做到这一点?或者,我会添加类似于以下内容的子句:
if math.isclose(value, 0) and value != 0:
return "< 0.1"
答案 0 :(得分:2)
我建议运行round
来确定字符串格式是否要将比率四舍五入到0或1。此函数还可以选择舍入到小数点后几位数:
def get_rounded(value, decimal=1):
percent = value*100
almost_one = (round(percent, decimal) == 100) and percent < 100
almost_zero = (round(percent, decimal) == 0) and percent > 0
if almost_one:
return "< 100.0%"
elif almost_zero:
return "> 0.0%"
else:
return "{:2.{decimal}f}%".format(percent, decimal=decimal)
for val in [0, 0.0001, 0.001, 0.5, 0.999, 0.9999, 1]:
print(get_rounded(val, 1))
哪个输出:
0.0%
> 0.0%
0.1%
50.0%
99.9%
< 100.0%
100.0%
我不认为有更短的方法来做到这一点。我也不建议使用math.isclose
,因为您必须使用abs_tol
,而且可读性不强。
答案 1 :(得分:2)
假设使用Python 3.6+,可以将标记为零或100%完全做到:
>>> for value in (0.0,0.0001,.9999,1.0):
... f"{value:6.1%}{'*' if value == 0.0 or value == 1.0 else ' '}"
...
' 0.0%*'
' 0.0% '
'100.0% '
'100.0%*'