как хранить nsdecimalnumber в базе данных? - PullRequest
2 голосов
/ 13 октября 2010

Каков наилучший способ хранения nsdecimalnumbers в базе данных? Числовые типы, такие как float, real и double, отсутствуют, потому что важно сохранить точность использования валюты.

Две альтернативы, которые я рассмотрел, это строка и хранение двух целых: одна содержит мантиссу, а другая - экспоненту. Проблема, стоящая перед последним подходом, состоит в том, что я не вижу простого способа вытащить мантиссу и показатель степени из nsdecimalnumber. Я могу получить NSDecimal из NSDecimalNumber, но свойства мантиссы и экспоненты кажутся закрытыми! Возможно, я могу поменять число = (показатель мантиссы * 10 ^), но есть ли лучший способ сделать это?

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

Редактировать: Я могу получить доступ к показателю степени, но мантисса хранится в странной манере ... тыкая в нее в отладчике, обнаруживает, что это массив коротких (целых).

1 Ответ

1 голос
/ 13 октября 2010

NSDecimalNumber соответствует NSCoding , поэтому вы можете кодировать его с помощью encodeWithCoder: перед добавлением его в базу данных, а затем декодировать с помощью initWithCoder:при извлечении из базы данных.

См. Руководство по программированию архивов и сериализаций , в частности " Объекты кодирования и декодирования ", для получения дополнительной информации об использовании кодировщиков.

...