【问题标题】:Python Cassandra floating precision lossPython Cassandra 浮动精度损失
【发布时间】:2017-12-21 16:42:12
【问题描述】:

我正在 Python 和 Cassandra 之间来回发送数据。我在我的 python 程序中使用了内置的 float 类型和我的 Cassandra 表的数据类型。如果我从 python 向 Cassandra 发送一个数字 955.99,在数据库中它会显示 955.989999。当我在 python 中发送查询以返回我刚刚发送的值时,现在是955.989990234375

我了解 python 中精度损失的问题,我只是想知道 Cassandra 中是否有任何内置机制可以防止这个问题。

【问题讨论】:

    标签: python cassandra floating-point precision cassandra-python-driver


    【解决方案1】:

    Python float 是一个 64 位 IEEE-754 double 精度二进制浮点数。在 Cassandra 中使用 double 来匹配类型。

    【讨论】:

    • 虽然这适用于某些值,但有些像 8.83 正在变成 null,尽管它与其他值具有相同的类型,知道为什么会发生这种情况吗?
    • 啊,问题不在于价值观本身。我使用DROP 删除浮动列并使用ADD 将它们放回原处。我没有命名为其他内容的列中包含空值。
    • 请记住,浮点值(如 float 或 double)总是存在精度问题。
    • 伟大的点曼德拉恩克。如果精度很重要,则应使用 cql 十进制类型。
    【解决方案2】:

    此外,如果由于某种原因您无法更改列定义,将浮点值转换为字符串并将 str 传递给 cassandra-driver 也可以解决您的问题。

    它将能够从str中生成精确的十进制值。

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 2011-02-01
      • 2021-05-09
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多