【问题标题】:Stuck with Number Float format in Python Decimal卡在 Python 十进制中的数字浮点格式
【发布时间】:2013-05-26 21:34:24
【问题描述】:

我正在编写一个代码,并在那里获得以下形式的数据:

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() 参数必须是字符串或数字

正如预期的那样。我很困惑,因为数据的形式与 python 十进制模块中实现的形式相同。有什么方法(单线)可以将数据转换为浮点数吗?

这个link 可能有同样的问题。也请查看this

【问题讨论】:

  • is_special 不是Decimal 的属性
  • 我认为是数字的属性。查看tip关于属性错误和这个link也显示了python代码中的修改。

标签: python dictionary floating-point decimal typeerror


【解决方案1】:

接受这个:

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 除非您的复制符号错误,因为值是 01
  • 什么是加号,什么是减号? 0:加,1:减?
  • 1 表示已设置符号,因此为负,0 表示未设置,因此为正。您可以使用-2*sign + 1 来获取1-1,具体取决于符号。或者更易读的东西,比如-1 if sign else 1
  • 谢谢。刚刚发现我自己在看decimal.Decimal。并修改了解决方案。
  • 是否为此转换定义了任何内置函数?或者我需要像@MikeMüller 那样编写代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多