代码之家  ›  专栏  ›  技术社区  ›  ru3sch

比较EXTO中的十进制值

  •  2
  • ru3sch  · 技术社区  · 6 年前

    我有下面的外部模式和查询,并试图找出正确的方法进行比较 Decimal 价值观。

    架构:

    schema "products" do
      field(:price, :decimal)
    end
    

    查询:

    from(
      p in Product,
      where: p.price <= ^max_price
    )
    

    #Decimal<integer_value> 尽管如此)。但是,无论何时 product.price #Decimal<1000.00> ,返回了错误的结果。

    十进制库甚至用 < etc在使用小数时不正确。然而,当与外胚层一起使用时,我们将如何进行比较呢?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sheharyar    6 年前

    如果我理解正确,其中一个(或两个)变量是 Decimal 类型。这意味着问题不是比较实际值,而是比较结构。这将产生不一致的结果。例如:

    iex> Decimal.new(-1) > Decimal.new(0)
    true
    

    你需要使用 Decimal.compare/2 方法。


    但是在外星生物的查询中, 这些比较是 automatically handled 通过底层数据库及其Elixir适配器。您可能正在使用一个旧的数据库驱动程序/适配器,但它没有正确实现。