我具有以下Ecto模式和查询,并且正在尝试找出比较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>
,我都会返回错误的结果。
十进制库甚至说使用十进制时使用<
等进行比较是不正确的。但是,与Ecto一起使用时,如何进行比较?
答案 0 :(得分:0)
如果我理解正确,则其中一个(或两个)变量均为Decimal
类型。这意味着问题在于您不是在比较实际值,而是在比较结构。这将导致不一致的结果。例如:
iex> Decimal.new(-1) > Decimal.new(0)
true
您需要使用Decimal.compare/2
方法。
但是在Ecto查询的背景下,这些比较是由基础数据库及其Elixir适配器进行的automatically handled。您可能正在使用无法正确实现的较旧的数据库驱动程序/适配器。