如何在Python中转换指数并且去除'e+'?

3

我刚开始学习Python,最近遇到了一个包含大量数值的数据集。 其中一个字段包含一系列数字,看起来像这样:1.3212724310201994e+18(注意数字末尾的e+18)。

我该如何将其转换为浮点数并移除指数,同时不影响数值本身?


3
不清楚问题出在哪里。类似n.nnnnne+nnn这样的数字可以被视为普通浮点数——从输入解析器的角度来看,它与n.nnnnnn是相同类型的数字。也许你可以更详细地说明你想要做什么。 - Robert Dodier
1
@QuangHoang 这样做没有帮助。 - Ann Zen
1
只是为了让它们看起来不同吗?因为这不会影响你对它们的任何操作。 - Derek Eden
“我该如何将其转换为浮点数并删除指数,而不影响值?”这没有意义。有仅有一个浮点数具有相同的值(因此您“转换它”为其他任何东西都会“影响值”)。默认情况下,该值是使用您看到的e编写的。如果您希望以不同的方式表示它,则是不同的问题。如果您想将其转换为整数,也是可能的。但是您无法“删除指数”,因为那是数字本身的组成部分。 - Karl Knechtel
就好像你有一罐蓝色油漆,想要从油漆本身中去除“蓝色”这个词。你可以使用其他词来描述这种油漆。你可以用这种油漆来涂墙。你可以在不同的光照条件下观察这种油漆。但是,如果不改变它的颜料,你无法使这种油漆从根本上停止成为“蓝色油漆”。 - Karl Knechtel
显示剩余2条评论
2个回答

5

首先,这个数字已经是一个浮点数了,你不需要改变它。唯一的问题是你想要更多地控制将其转换为字符串以便输出。

默认情况下,超过一定大小的浮点数会使用指数表示法(其中"e"代表"*10^")来转换成字符串。但是,如果你想要将其转换为没有指数表示法的字符串,可以使用f格式说明符,例如:

a = 1.3212724310201994e+18

print("{:f}".format(a))

提供:

1321272431020199424.000000

或者在 Python 3 中使用 "f-strings":

print(f"{a:f}")

这里的第一个 f 表示使用 f-string,而 :f 是浮点数格式说明符。

您还可以指定应显示的小数位数,例如:

>>> print(f"{a:.2f}")   # 2 decimal places
1321272431020199424.00

>>> print(f"{a:.0f}")   # no decimal places
1321272431020199424

请注意,Python 中浮点数的内部表示使用了 53 位二进制精度(大约相当于 $10^{16}$ 中的一部分),因此在这种情况下,数量级约为 $10^{18}$ 的数字值没有以最接近整数甚至任何小数位的精度存储。但是,上述内容提供了控制用于字符串转换的格式的一般原则。

这是一个更好的答案,因为它直接解决了根本误解。 - Karl Knechtel

2
您可以使用来自decimal模块的Decimal函数处理您数据中的每个元素:
from decimal import Decimal

s = 1.3212724310201994e+18

print(Decimal(s))

输出:

1321272431020199424

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接