gpt4 book ai didi

python - 如何在 SQL 数据库中存储 python float

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:25 26 4
gpt4 key购买 nike

在 python3 中,我主要使用 float 或 np.float32/64,当涉及到将其存储到数据库中时,即使 SQL 类型是数字/小数,我们最终也会得到 0.400000000000021 或类似的东西而不是 0.4
如果从另一个应用程序访问此类数据,则可能会出现问题。

仅使用 decimal。python 中的 Decimal 不是我们的答案,因为我们大量使用 pandas,并且不支持 Decimal。
一个解决方案是在插入 SQL 之前将 float 转换为 Decimal(在我们的例子中是 SQL Server,但这是一个细节)。然后在 SELECT 之后从 Decimal 返回到 float。
您有另一种(更好的)方法来处理此类问题吗?

最佳答案

问题是你的 float 值不是 0.4,因为 float32float64(或 Python 原生 float,通常与 float64) 相同,即 0.4。最接近 0.4 的 float64 是 0.400000000000021,这正是您所得到的。

因为这是最接近 0.4 的 float 值,如果您要求 Python 将其转换为字符串(例如,print(f)),它会友好一点,给你字符串 0.4

但是当你将它传递给数据库时……嗯,这实际上取决于你使用的是哪个数据库接口(interface)库。对于一些,它会调用 repr,这会给你 '0.4'(至少在 Python 3.x 中),所以你要求数据库存储 float 字符串 '0.4' 的值。但对于其他人,它将直接将浮点值作为 C double 传递,因此您要求数据库存储浮点值 0.400000000000021


那么,你应该怎么做呢?

  • 您是否希望将此数据库与其他代码一起使用,这些代码会将值作为字符串读取,然后将它们转换为类似 Decimalfloat80decimal64 的格式 还是其他类型?然后,您几乎肯定想要设置一个 SQL 数据类型,如 DECIMAL(12, 6) 来匹配您的实际精度,并让数据库来处理它。 (毕竟0.4四舍五入到小数点后六位和0.400000000000021四舍五入到小数点后六位没有区别。)
  • 您想在数据库内部进行数学计算吗?同上。
  • 否则呢?什么都不做。

严重的是,如果要使用此数据库的其他代码只是将值读取为 float64,或者将它们读取为字符串并将它们转换为 float64 (或 float32),无论您做什么,它们都将以 0.400000000000021 结束,所以不要做任何事情。

此外,考虑一下:如果 0.40.400000000000021 之间的差异会对您的任何代码产生任何影响,那么您的代码已经通过使用 float64,甚至在您访问数据库之前。

关于python - 如何在 SQL 数据库中存储 python float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49522441/

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