2013-05-31 57 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