我正在尝试将带有字符串的列表转换为带有浮点数的列表。 字符串都是数字,小数点后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]
答案 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 )。