Какой тип данных использовать, чтобы 1 и 1.0 были действительны в Datomic?

{
  :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 
}

Я получаю сообщение об ошибке, когда пытаюсь добавить 1 к объекту.

:message "java.lang.IllegalArgumentException: :db.error/wrong-type-for-attribute Значение 1 не является допустимым :float для атрибута :outcome/weighting"

Он отлично работает, если я передаю 1.0.

Я ценю это (= (float? 1) false), но есть ли другой способ избежать этого с помощью настроек Datomic без разбора входящего EDN и настройки с 1 на 1.0?


person fatbatman    schedule 26.09.2015    source источник
comment
ты пробовал db.type/double? Кажется, double предпочтительнее groups.google.com/d/msg/datomic/MbIIN_rlwng /fEJ0vPh66XAJ   -  person leeor    schedule 26.09.2015
comment
Вы хотите хранить 1.0 как 1, или вы также хотите иметь возможность хранить 1.5? И вам нужно точно хранить 1,5 или допустима плавающая точность?   -  person August Lilleaas    schedule 26.09.2015


Ответы (1)


Вы не можете хранить как целые, так и плавающие числа в одном и том же атрибуте схемы в Datomic. Таким образом, вам нужно будет привести значение к тому типу, который вы выберете (возможно, с плавающей запятой или удвоить здесь), прежде чем совершать его. Вы можете сделать это в коде, выполняющем транзакцию, или даже в функции транзакции.

person Alex Miller    schedule 10.04.2019