2014-09-18 87 views
1

只是尋找一個問題的答案似乎沒有任何數量的谷歌搜索結果。如何在Python中爲浮點值建立索引?

如果..

a = 1.23 

我希望能夠把1和這個數字乘以還保持0.23

這怎麼可能?

提前致謝!

+1

你爲什麼稱這個操作爲「索引」?這聽起來像是在選擇和操作數字的字符串表示的部分方面。如果是這樣,你會想要停止考慮文本方面的數字,並開始考慮數字操作。在這裏,它看起來像是要向下舍入或向下舍入爲零。 – user2357112 2014-09-18 17:49:46

+0

[在python中將數字拆分爲整數和小數部分](http://stackoverflow.com/questions/6681743/splitting-a-number-into-the-integer-and-decimal-parts-in- python) – munk 2014-09-18 17:53:23

+0

你實際的問題很[很難察覺](http://stackoverflow.com/questions/25919129/how-do-you-index-a-float-value-in-python/25958114#comment40573206_25919190)。 – Wolf 2014-09-21 10:16:03

回答

0

你不能索引的浮動這樣。這不是一個集合。有關如何浮點數工作的詳細信息,請閱讀http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

數學庫爲您提供了一種方式來獲得與數字的兩個部分的元組雖然

>>> import math 
>>> a = 1.23 
>>> math.modf(a) 
(0.22999999999999998, 1.0) 

這是不是因爲這樣的exacct表示浮點數,但值大約爲1e-17。

當然,這始終是可能的太...

>>> map(int, str(a).split('.')) 
[1, 23] 
+0

這看起來像我在找什麼。準確地解釋我在做什麼。我希望能夠以小時輸入一個值,然後將它們轉換爲分鐘。所以,如果它是1.20,我會乘以60乘以60,然後加20。我確定必須有一個更簡單的方法:)格式化抱歉,這只是我的第二個問題,並且試圖去掌握網站。 – 2014-09-18 18:00:16

+4

如果您正在處理時間問題,那麼您肯定應該使用時間模塊,而不是試圖將浮點強制轉換爲奇怪的時間表示。 – munk 2014-09-18 18:20:48

+1

如果你正在尋找時間算術,你應該使用爲此設計的timedelta對象。 '將datetimetime導入爲dt; dt.timedelta(hours = 1,minutes = 20).seconds // 60' – b10n 2014-09-18 18:21:47

0

int()你在找什麼:

In [39]: a = 1.23 

In [40]: int(a) 
Out[40]: 1 

In [41]: a 
Out[41]: 1.23 
+0

'>>> a-int(a) 0.22999999999999998',它確實舍入到了0.23 – g4ur4v 2014-09-18 17:47:01

+0

我想他想要的東西更像(somefloat.integerpart * N + somefloat.fractionalpart)。防爆。當你僞造乘以6時,1.23變成6.23。 – Kevin 2014-09-18 17:48:19

2

在評論munkhd的回答你說:

我也希望能夠輸入一個值小時,然後將它們轉換爲分鐘。 所以,如果是1.20我要乘1 60再加入20 我肯定必須有一個更簡單的方法:)

因此你的程序將獲得1.20的字符串。所以,你可以使用它的字符串的方法,例如

>>> dotted_time = '1.20' 
>>> h, m = [int(s) for s in dotted_time.split('.')] 
>>> print h, m 
1 20 
>>> minutes = 60*h + m 
>>> hours = minutes/60.0 
>>> print minutes, hours 
80 1.33333333333 

或者,你可以做colon_time = dotted_time.replace('.', ':'); colon_time採用標準時間函數可以理解和操作的格式。這可能是更合理的處理方式,如果您想要處理像'1.20.30'這樣的秒數,那麼.replace('.', ':')將轉換爲'1:20:30',這將很容易應對。

+1

這很難,檢測註釋中的實際問題;)(+1) – Wolf 2014-09-21 10:12:50

0

除了PM 2Ring's answer似乎解決[1]您的實際問題,將其轉換爲字符串後,可能會「指數花車」,當然,但要注意精度的限制。因此,使用內置的round功能來定義您的解決方案所需的精度:

s = str(round(a, 2)) # round a to two digits 

現在,你可以申請你想給它的所有字符串函數。之後,您可能需要將結果轉換回floatint ...


[1]其他人已經建議這樣的:與普通機型在高層次的語言處理像時間蟒蛇時,期望通過reliable solutions that are already there支持。

相關問題