2013-05-31 58 views
0

我工作的一個代碼,並有我在的形式獲取數據:在Python與數精度浮點數格式滯留小數

k=[{'item_id': '43381702', 'length': {'_exp': -2, '_is_special': False, '_int': '0', '_sign': 0}, 'height': {'_exp': -2, '_is_special': False, '_int': '0', '_sign': 0}, 'width': {'_exp': -2, '_is_special': False, '_int': '0', '_sign': 0}, 'unitweight': {'_exp': -3, '_is_special': False, '_int': '3000', '_sign': 0}, 'quantity': 1}]

而且據預計,當我寫

float(k[0]['unitweight']) 

它應該被轉換成浮點數。但它是給予

TypeError: float() argument must be a string or a number

如預期。我很困惑,因爲數據的格式與python十進制模塊中實現的形式相同。有沒有什麼辦法(單線)我可以通過哪些方式將數據轉換爲浮點數?

這個link可能有相同的問題。退房this也。

+0

'is_special'不是'Decimal'的屬性 – jamylak

+0

我認爲它是一個數字的屬性。查看[提示](http://www.itmaybeahack.com/homepage/books/nonprog/html/p13_modules/p13_c03_decimal.html#rounding-known-as-quantization)關於attribue錯誤和此[鏈接](http:/ /mail.python.org/pipermail/python-checkins/2007-November/063656.html)也顯示了python代碼中的修改。 – tusharmakkar08

回答

2

有鑑於此:

d = {'_exp': -3, '_is_special': False, '_int': '3000', '_sign': 0} 

爲:

k[0]['unitweight'] 

你可以做這樣的事情:

import math 
math.copysign(int(d['_int']) ** d['_exp'], d['_sign'] * -1) 

結果:

3.7037037037037036e-11 

不知道'_is_special'的含義。

+1

+1除了你的複製標誌是錯誤的,因爲這些值是'0'或'1' – jamylak

+0

什麼是加號和什麼是減號? 0:加號,1:減號? –

+0

'1'表示符號被設置爲負值,'0'表示不符合正值。根據符號,您可以使用'-2 *符號+ 1'來獲得'1'或'-1'。或者更可讀的東西,比如'-1 if sign else 1' – jamylak