我有一个函数需要两个截止值,称为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)
但使用float
(1/3.)
,警告包含0.333333333333
。我宁愿让它说0.333
,所以我尝试了%.3f
,但也将int
值转换为浮点数,并为2.000
显示2
。< / p>
如何打开类型以获得正确的格式?在将格式字符串传递给%
运算符之前,是否需要构建格式字符串?
更新:我需要一些适用于Python 2.5的东西,因为这是我定位的最低版本。
答案 0 :(得分:8)
保持简单
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))
答案 1 :(得分: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'