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.但它会被存储在我记忆中的某个地方。我可以检索它以查看它对数字的作用吗?
谢谢大家,你们非常乐于助人!
答案 0 :(得分:2)
>>> precision=4
>>> '%%1.%df'%precision
'%1.4f'
%%被转换为%
1按原样打印
%d以十进制数字打印精度
f按字面打印
答案 1 :(得分:0)
在('%%1.%df' % precision)
中,第一个%%
生成文字%
,%d
替换为precision
,f
按字面插入。这是一个如何结果的例子:
>>> '%%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