【问题标题】:Turning list from str into float with more then 2 decimal places将列表从字符串转换为小数点后 2 位以上的浮点数
【发布时间】:2018-12-19 08:38:17
【问题描述】:

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

【问题讨论】:

  • 1525356511.394770 == 1525356511.39477。一切都很好。
  • 如果您需要尾随零,请不要使用浮点数。保留字符串。
  • 哎哟!很抱歉粘贴了错误的 timestamps_list_3 内容。它实际上只有两位小数!我在上面改了。
  • 请显示您用于生成最终输出的代码。大概你是printing 个人花车?
  • 无法在此处重现,无论是在 Python 2 还是 Python 3 上。几乎可以肯定有些东西您没有在这里展示或告诉我们。

标签: python string floating-point decimal precision


【解决方案1】:

你可以使用 python 中的十进制类 -

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

但这会给你十进制类的数字,但如果它是数字中的最后一个数字,它将保留 0。

否则使用浮点数,如果它是数字中的最后一个数字,它将删除 0 -

timestamps_list_3 = [float(i) for i in timestamps_list_2]

如果有帮助,请告诉我。

附: - 您可以对十进制类进行基本的数学运算。

【讨论】:

  • 感谢您的回答!帮了大忙!
【解决方案2】:

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)。

【讨论】:

  • 感谢您的回答!它现在工作正常!我不知道为什么 Python 只返回正常浮点数的两位小数...
猜你喜欢
  • 2013-08-11
  • 2018-07-07
  • 2011-11-25
  • 2019-11-15
  • 1970-01-01
  • 2020-08-29
  • 2021-11-30
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多