在不损失精度的情况下,将`float`类型转换为`str`

时间:2016-12-11 18:33:46

标签: python string list

我对Python很陌生,并且有一个如下列表:

[{u'value': 0, u'time': u'12:39:00'},
{u'value': 0.019179999828338623, u'time': u'12:40:00'},
{u'value': 0, u'time': u'12:41:00'},
{u'value': 0, u'time': u'12:42:00'},
{u'value': 0, u'time': u'12:43:00'},
{u'value': 0, u'time': u'12:44:00'},
{u'value': 0, u'time': u'12:45:00'},
{u'value': 0, u'time': u'12:46:00'},
{u'value': 0.01713000051677227, u'time': u'12:47:00'},
{u'value': 0.023979999125003815, u'time': u'12:48:00'}]

我将此列表传递给另一个应该以某种方式格式化的函数(删除值为0的所有元素,并将日期添加到time元素)。作为一个例子,我试图实现以下“清理列表”:

[{'count': '0.019179999828338623', 'datetime': '2016-12-11 12:40:00'}, ...]

我面临的问题是,当我遍历列表中的所有元素时,Python似乎将值截断为15个字符,因此上述结果是:

[{'count': '0.0191799998283', 'datetime': '2016-12-11 12:40:00'}, ...]

我的“清理”清单的代码如下

for my_data in my_list:
    if my_data['value']:
            my_record = {"count": str(my_data['value']), "datetime": '%s %s' % (the_date, my_data['time'])}
            final_result.append(my_record)

我已尝试从此函数打印my_list - 数据正确存在(没有截断)。但是,当我从循环(print(my_data['value']))中打印当前元素时,我得到了15个字符截断的值。

任何帮助都应该受到赞赏!

1 个答案:

答案 0 :(得分:4)

而不是将其类型转换为str,而是使用repr。您将获得值作为字符串而不会丢失精度。例如:

>>> repr(0.019179999828338623)
'0.019179999828338623'

因此,您的代码应该是:

for my_data in my_list:
    if my_data['value']:
        final_result.append({
            "count": repr(my_data['value']),  # Using `repr` here
            "datetime": '%s %s' % (the_date, my_data['time'])
        })