在python中理解这个类。运算符%并格式化浮点数

时间:2009-09-26 23:17:55

标签: python class operators

class FormatFloat(FormatFormatStr):
    def __init__(self, precision=4, scale=1.):
        FormatFormatStr.__init__(self, '%%1.%df'%precision)
        self.precision = precision
        self.scale = scale

    def toval(self, x):
        if x is not None:
            x = x * self.scale
        return x

    def fromstr(self, s):
        return float(s)/self.scale

困扰我的部分是这部分

FormatFormatStr.__init__(self, '%%1.%df'%precision)

这是否意味着精度在1之前和df之前输入两次? df代表你所知道的任何事情吗?我在其他地方看不到它,就像在这里可以看到的那样:

class FormatFormatStr(FormatObj):
    def __init__(self, fmt):
        self.fmt = fmt

    def tostr(self, x):
        if x is None: return 'None'
        return self.fmt%self.toval(x)

class FormatObj:
    def tostr(self, x):
        return self.toval(x)

    def toval(self, x):
        return str(x)

    def fromstr(self, s):
        return s

另外,我把它放到我的Ipython中并得到它:

In [53]: x = FormatFloat(.234324234325435)
In [54]: x
Out[54]: <matplotlib.mlab.FormatFloat instance at 0x939d4ec>

我认为它会将精度降低到4并缩放到1.但它会被存储在我记忆中的某个地方。我可以检索它以查看它对数字的作用吗?

谢谢大家,你们非常乐于助人!

3 个答案:

答案 0 :(得分:2)

>>> precision=4
>>> '%%1.%df'%precision
'%1.4f'

%%被转换为%

1按原样打印

%d以十进制数字打印精度

f按字面打印

答案 1 :(得分:0)

('%%1.%df' % precision)中,第一个%%生成文字%%d替换为precisionf按字面插入。这是一个如何结果的例子:

>>> '%%1.%df' % 4
'%1.4f'

More about string formatting in Python

为了使用FormatFloat课程,你可以尝试这样的事情:

formatter = FormatFloat(precision = 4)
print formatter.tostr(0.2345678)

答案 2 :(得分:0)

在python格式的字符串中,“%%”表示“插入一个文字百分号” - 第一个%''转义'第二个,用行话。有问题的字符串"%%1.%df" % precision使用格式字符串生成格式字符串,唯一被替换的是“%d”。在交互式提示下尝试:

>>> print "%%1.%df" % 5
'%1.5f'

课程FormatFloat未定义__repr____str____unicode__(用于类型强制的“魔法”方法),因此当您打印该值时在交互式控制台中,您将获得实例的标准表示。要获取字符串值,可以调用tostr()方法(在父类上定义):

>>> ff = FormatFloat(.234324234325435)
>>> ff.tostr()
0.234