2014-02-20 50 views
2

假設我可以查看浮點數,就好像它是某種類型的字典,其中的鍵範圍從-infinity到infinity,而值是這些地方的數字。也就是說,f [i]將返回最接近(f % 10**(i+1) - f % 10**i)/10**i的整數。快速獲取浮點數字

例如,如果f=1234.5678,f[-1] == 5f[2] == 2

此外:想象浮動也支持一些奇怪的圖像切片形式(即使它不是一個列表,就像它不是一個字典),所以在我們的例子f[-1:2] == 345

我需要這個實際的原因,我需要它很快完成。我想我可以根據我在第一段中寫的表達式(它返回一個浮點數,帶有浮點數的所有問題,我應該小心地轉換爲一個整數)來編寫一些笨拙的東西。

所以我想知道是否有一些簡單的,或者至少更優雅,快速溶液(性能是一個問題在這裏),不涉及庫,如decimal

可能值得一提的是,我沒有考慮模擬__getitem__或切片符號的解決方案。功能def getslice(f, a, b)是完美的。

+0

你的公式聽起來像你已經完成了大部分工作。這裏沒有「快速」解決方案,因爲浮點數不是以數字表示,除非您先將它們格式化爲字符串。 –

+0

我想一些聰明的字符串處理可能會完成這項工作,但我對於第四和第四次投擲的代價沒有任何想法,而且我不確定字符串解決方案可能會更快。 – Bach

+0

另外,你是怎麼處理漂浮指數的?索引是相對於小數點始終還是浮點數?例如,什麼是-1.5e-10的迴歸? –

回答

2

您可以將其更改爲字符串。

mystr = str(num) 

然後通過具有'。'的位置。在mystr

mystr[pos+index] 

是你需要什麼,在哪裏指數是你之前和浮點後確定位置的方式。

+0

如果沒有'.'會怎麼樣?那麼帶指數的漂浮物呢? – Bach

+0

通過使用「查找」,您可以找到「。」的位置。並知道它是否有浮點。 如果它沒有pos = 0將做這項工作。 的指數,你可以浮點 它轉向串 –

+0

@ user3310151前使用後 格式(NUM,「.xf」)#x是數字最大數量:爲確保您始終獲得所有的數字,'格式( num,'.1074f')'起作用。不過,我仍然不確定爲什麼要這樣做。 –