将列表从str转换为float并保留小数点后2位

时间:2018-07-11 10:30:45

标签: python string floating-point decimal precision

我正在尝试将带有字符串的列表转换为带有浮点数的列表。 字符串都是数字,小数点后2位以上(大多数小数点后6位)。

问题是Python仅保留字符串的小数点后两位(实际上是四舍五入)。但是我需要所有小数位。

我的代码如下:

timestamps_list_3 = []
for i in range(len(timestamps_list_2)):
    timestamps_list_3.append(float(timestamps_list_2[i]))

timestamps_list_2的内容如下:

['1525356511.394770', '1525356511.438828', '1525356511.477972', '1525356511.506286', '1525356511.533924']

timestamps_list_3:

[1525356511.40, 1525356511.44, 1525356511.48, 1525356511.51, 1525356511.53]

2 个答案:

答案 0 :(得分:0)

您可以使用python中的十进制类,例如-

import decimal
timestamps_list_3 = [decimal.Decimal(i) for i in timestamps_list_2]

但是这将为您提供带十进制的数字,但是如果它是数字中的最后一位,它将保留0。

否则使用float,如果它是数字中的最后一位-

,它将删除0。
timestamps_list_3 = [float(i) for i in timestamps_list_2]

让我知道是否有帮助。

P.S。 -您可以对十进制进行基本的数学运算。

答案 1 :(得分:0)

64位浮点数最多可以处理16个小数位的精度。*因此,如您的问题所示,如果字符串在句点之后最多包含6位数字,则不会遇到任何问题。

要获得更高的准确性(默认28个小数位,但可由用户定义),则应使用decimal模块,但首先请确保这是必需的。相对于float,计算将变得昂贵。

from decimal import Decimal

L = ['1525356511.394770', '1525356511.438828',
     '1525356511.477972', '1525356511.506286',
     '1525356511.533924']

res = list(map(Decimal, L))

print(res)

[Decimal('1525356511.394770'), Decimal('1525356511.438828'),
 Decimal('1525356511.477972'), Decimal('1525356511.506286'),
 Decimal('1525356511.533924')]

*参见IEEE 754 double-precision binary floating-point format: binary64

  

53位有效位数精度为15到17个有效位数   十进制数字精度(2 −53 ≈1.11×10 −16 )。