2012-07-16 22 views
4

我正在使用python,我在這個問題上陷入困境。元組數字到數字轉換

輸入(有一個元組):

a = (0, 1) 

輸出:

a = 0.1 
+0

您可以顯示其他示例和輸出嗎?你真的想將零件轉換爲字符串,與點連接,並轉換爲浮動? – pepr 2012-07-16 10:41:09

回答

10

單個數字和僅使用兩個元素

>>> a = (0, 1) 
>>> a[0] + a[1] * 0.1 
0.1 

多個位數

>>> from itertools import count 
>>> a = (0, 1) 
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a)) 
0.1 
>>> a = (0, 1, 5, 3, 2) 
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a)) 
0.15320000000000003 

使用reduce(對於P 3.0+你將需要:from functools import reduce

>>> a = (0, 1, 5, 3, 2) 
>>> reduce(lambda acc, x: acc * 0.1 + x, reversed(a)) 
0.1532 

使用decimal模塊

>>> from decimal import Decimal 
>>> a = (0, 1, 5, 3, 2) 
>>> Decimal((0, a, -len(a) + 1)) 
Decimal('0.1532') 

任意兩個數字

>>> a = (0, 1) 
>>> float('{0}.{1}'.format(*a)) 
0.1 

任何數字

>>> a = (0, 1, 5, 3, 2) 
>>> float('{0}.{1}'.format(a[0], ''.join(str(n) for n in a[1:]))) 
0.1532 

可能會有一些浮動點不準確,你可以通過使用Decimal小號如修復。

>>> sum(Decimal(n) * Decimal(10) ** Decimal(i) for i, n in zip(count(0, -1), a)) 
Decimal('0.1532') 
+0

第一個例子可以寫成float('{0}。{1}'。format(* a))''。 – pepr 2012-07-16 10:39:49

+0

@pepr我的壞我忘記了。 – jamylak 2012-07-16 10:40:14

+0

我沒有說這是壞的。實際上,它比'* a'更加神祕。:) – pepr 2012-07-16 10:44:00

1

假設你的列表a的元素是個位數0-9,您可以用數學:

>>> a[0] + a[1] * 0.1 
0.10000000000000001 

或轉換爲字符串,串聯和轉換回飄:

>>> float(str(a[0])+'.'+str(a[1])) 
0.10000000000000001 
+0

第一個例子不適用於'(1,100)'。 – pepr 2012-07-16 10:31:38

+0

*「簡單的方法」*也將只適用於元組的第二個值在0到9範圍內 – 2012-07-16 10:32:17

+0

@pepr + refp - true,這可能是我的一個輕率假設,調整後的文本。 – fraxel 2012-07-16 10:36:47

0
from math import log 
a = (x, y)  
a[0] + a[1]/float(10 ** (int(log(a[1], 10)) + 1)) 

將評價爲

x.y