gpt4 book ai didi

python - 值 161137531201111100, 1.611375312011111e+17 是否相等?

转载 作者:行者123 更新时间:2023-12-04 08:41:39 24 4
gpt4 key购买 nike

我正在尝试操作数据框。我用来将列附加到数据帧的列表中的值为 161137531201111100。但是,我创建了一个字典,其键是该列的唯一值,并且我在进一步的操作中使用了这个字典。这以前可以完美运行。
但是,在对另一个数据尝试此代码后,出现以下错误:

KeyError: 1.611375312011111e+17
这意味着这个值不是字典的值;我试图追踪代码,一切似乎都很好。但是,当我打开我构建的数据框的 csv 文件时,我发现导致问题的值是: 161137531201111000 不在列表中(并且 ofc 不是字典中的键)我用来创建此列数据框。这看起来很奇怪。但是,我不知道是什么原因?是否有任何理由以另一种方式保存数字?
我怎样才能在所有阶段保存它?另外,为什么它在 csv 中发生了变化?

最佳答案

不,不幸的是,它们并不相等

print(1.611375312011111e+17 == 161137531201111000)` # False.
问题在于计算机和大多数编程语言(包括 Python)处理浮点数的方式。
如果你想要精确的结果,在进行计算时总是使用整数(而不是“太大”)。
Is floating point math broken?对于作为程序员你绝对必须知道的通用解释,即使它不是特定于 Python 的。
(并且请注意,Python 试图在 整数 上保持精度方面做得相当好,不幸的是,这不适用于浮点数)。
只是为了“有趣”浮点数, 1.611375312011111e+17实际上等于整数 161137531201111104 !
print(format (1.611375312011111e+17, ".60g"))      # shows 161137531201111104
print(1.611375312011111e+17 == 161137531201111104) # True

a = dict()
a[1.611375312011111e+17] = "hello"
#print(a[161137531201111100]) # Key error, as in question
print(a[161137531201111104]) # This one shows "hello" properly!

关于python - 值 161137531201111100, 1.611375312011111e+17 是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64540497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com