3

我有一个需要两个截止值的函数,称为min_dfmax_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.0002.

如何打开类型以获得正确的格式?在将格式字符串传递给操作员之前,我是否需要构建格式字符串%

更新:我需要在 Python 2.5 中工作的东西,因为这是我所针对的最低版本。

4

2 回答 2

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))
于 2011-09-19T10:27:40.697 回答
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'
于 2011-09-19T10:18:45.713 回答