2014-10-22 64 views
1

我想將一個數字(int,float等)和它的科學記數法(包括它的精確度)存儲到一個對象中。,如何創建一個類似數字的對象?

例如,我有a = 0.001因爲它的價值和1.0e-3,因爲它是科學記數法。目前我有一個班級:

def numLike(): 
    def __init__(self, n, p): 
     self.n = n 
     self.p = p 

a = numLike(0.001, '1.0e-3') 

這樣我至少可以將這兩個值關聯到1個對象中。當我想進行計算時,我將使用a.n,並在打印出來時使用a.p

我想要實現的是Python在計算時將a識別爲a.n,在不計算任何計算時將a識別爲a.p。所以當我輸入a + 0.003時,應該給我0.004,當我輸入a時,它自動返回'1.0e-3'

+0

在你的代碼中,你正在定義一個函數numLike而不是一個類。這是一個錯字嗎? – greole 2014-10-22 07:39:15

回答

5

無需存儲字符串表示,在需要的時候只是生成它:延長float並覆蓋__str__

class x(float): 
    def __str__(self): 
     return "{:e}".format(self) 

print (float(101)) # 101.0 
print (x(101))  # 1.010000e+02 

,或者沿傳精度,

class x(float): 
    def __new__(cls, value, prec=6): 
     self = float.__new__(cls, value) 
     self.prec = prec 
     return self 

    def __str__(self): 
     return "{:.{}e}".format(self, self.prec) 

print (float(101)) # 101.0 
print (x(101))  # 1.010000e+02 
print (x(101, 2)) # 1.01e+02 

如果您決定走你的路,你必須覆蓋所有的算法(__add__和朋友),並委託給self.n

+0

我認爲你的觀點是完全有效的。謝謝。 – capsensitive 2014-10-22 07:57:35

相關問題