我正在设计Python的面向对象功能。到目前为止,我只使用NumPy和SciPy而不是纯Python本身。我写了这段小代码:
class Point(object):
def __init__(self, x = 0.0, y = 0.0):
self.x = x
self.y = y
def __str__(self):
return '%.2d , %.2d' % (self.x, self.y)
def print_point(self):
print('%.1d , %1.d' % (self.x,self.y))
a = Point()
b = Point(1.2,4.5)
print(a)
print(b)
现在输出是:
00 , 00
01 , 04
这对我来说似乎是一个经典的格式错误,因为输出应该是(0.0,0.0)和(1.2,4.5)。
我做错了什么?
答案 0 :(得分:3)
只需将 str 更改为:
def __str__(self):
return '%.2f , %.2f' % (self.x, self.y)
记住:%d打印一个整数,%f打印一个浮点值。
答案 1 :(得分:2)
%d
格式化为整数。您想要%f
- 请参阅此处docs.python.org
但这是旧式的。
def __str__(self):
return "{:.2f} , {:.2f}".format(self.x,self,y)
将是现代方法。
答案 2 :(得分:2)
您需要将其从"%.2d"
更改为"%.2f"
。虽然我建议您使用格式而不是旧式格式。
class Point(object):
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
def __str__(self):
return '{0:.2f}, {1:.2f}'.format(self.x, self.y)
def print_point(self):
print('%.1d , %1.d' % (self.x, self.y))
a = Point()
b = Point(1.2, 4.5)
print(a)
print(b)
给你:
0.00, 0.00
1.20, 4.50