Python Cassandra 浮动精度损失
Posted
技术标签:
【中文标题】Python Cassandra 浮动精度损失【英文标题】:Python Cassandra floating precision loss 【发布时间】:2017-12-21 16:42:12 【问题描述】:我正在 Python 和 Cassandra 之间来回发送数据。我在我的 python 程序中使用了内置的 float
类型和我的 Cassandra 表的数据类型。如果我从 python 向 Cassandra 发送一个数字 955.99
,在数据库中它会显示 955.989999
。当我在 python 中发送查询以返回我刚刚发送的值时,现在是955.989990234375
。
我了解 python 中精度损失的问题,我只是想知道 Cassandra 中是否有任何内置机制可以防止这个问题。
【问题讨论】:
【参考方案1】:Python float
是一个 64 位 IEEE-754 double 精度二进制浮点数。在 Cassandra 中使用 double
来匹配类型。
【讨论】:
虽然这适用于某些值,但有些像8.83
正在变成 null
,尽管它与其他值具有相同的类型,知道为什么会发生这种情况吗?
啊,问题不在于价值观本身。我使用DROP
删除浮动列并使用ADD
将它们放回原处。我没有命名为其他内容的列中包含空值。
请记住,浮点值(如 float 或 double)总是存在精度问题。
伟大的点曼德拉恩克。如果精度很重要,则应使用 cql 十进制类型。【参考方案2】:
此外,如果由于某种原因您无法更改列定义,将浮点值转换为字符串并将 str 传递给 cassandra-driver 也可以解决您的问题。
它将能够从str中生成精确的十进制值。
【讨论】:
以上是关于Python Cassandra 浮动精度损失的主要内容,如果未能解决你的问题,请参考以下文章