整数格式为int,浮点数格式为%.3f
我有一个函数,它需要两个截止值,分别叫做 min_df
和 max_df
。这两个值可以是一个整数(int
),表示一个绝对的频率截止值;也可以是一个小数(float
),表示一个相对的频率。现在,我想加一些检查,并给出合适的警告信息,但又不想让代码看起来太乱。这段代码可以做到:
if max_df < 0 or min_df < 0:
raise ValueError, "neither max_df (%s) nor min_df (%s) may be <0" %
(max_df, min_df)
不过,当我用一个小数,比如 (1/3.)
时,警告信息里显示的是 0.333333333333
。我希望它能显示成 0.333
,所以我试了 %.3f
,但这样会把整数值也变成小数,像 2
会显示成 2.000
。
我该怎么根据类型来得到正确的格式呢?我需要在传递给 %
操作符之前先构建格式字符串吗?
更新:我需要一些在 Python 2.5 中能用的东西,因为这是我目标支持的最低版本。
2 个回答
6
这样怎么样:
>>> "{:.4g}".format(1)
'1'
>>> "{:.4g}".format(1.3)
'1.3'
>>> "{:.4g}".format(1.333)
'1.333'
>>> "{:.4g}".format(1.333333)
'1.333'
不过(因为这4个有效数字也包括整数部分),你还会得到这个:
>>> "{:.4g}".format(10.333)
'10.33'
>>> "{:.4g}".format(10000)
'1e+04'
9
保持简单
def format_df(df):
if isinstance(df, (int, long)):
return "%d" % df
elif isinstance(df, float):
return "%.3f" % df
else:
return str(df) # fallback just in case
raise ValueError, "neither max_df (%s) nor min_df (%s) may be <0" %
(format_df(max_df), format_df(min_df))