Clojure 要使用什么数据类型,以便1和1.0在Datomic中都有效?

Clojure 要使用什么数据类型,以便1和1.0在Datomic中都有效?,clojure,datomic,Clojure,Datomic,当我尝试将1添加到实体时,会出现错误 :消息“java.lang.IllegalArgumentException::db.error/error-type-for-attribute值1不是有效的:属性的浮点值:结果/权重” 如果我通过1.0,它工作正常 我很欣赏(=(float?1)false),但是有没有其他方法可以通过Datomic设置避免这种情况,而无需解析传入的EDN并从1调整到1.0?在Datomic的同一模式属性中不能同时存储INT和float。因此,在处理之前,您需要将该值强制

当我尝试将
1
添加到实体时,会出现错误

:消息“java.lang.IllegalArgumentException::db.error/error-type-for-attribute值1不是有效的:属性的浮点值:结果/权重”

如果我通过
1.0
,它工作正常


我很欣赏
(=(float?1)false)
,但是有没有其他方法可以通过Datomic设置避免这种情况,而无需解析传入的EDN并从
1
调整到
1.0

在Datomic的同一模式属性中不能同时存储INT和float。因此,在处理之前,您需要将该值强制为您选择的任何类型(这里可能是float或double)。您可以在执行事务的代码中执行此操作,甚至可以在事务函数中执行此操作。

您是否尝试过
db.type/double
?似乎首选
double
您是希望将1.0存储为1,还是希望能够同时存储1.5?你需要精确地存储1.5,还是浮动精度可以接受?
{
  :db/id #db/id[:db.part/db]
  :db/ident :outcome/weighting
  :db/valueType :db.type/float
  :db/cardinality :db.cardinality/one
  :db.install/_attribute :db.part/db 
}