Хранение валютных значений в SQLite3 - PullRequest
13 голосов
/ 16 июля 2010

Я имею дело с множеством разных валют в своем приложении, и я хочу знать, как лучше всего хранить их в базе данных SQLite3.

Я склоняюсь к представлению с фиксированной запятой (т.е. сохраняйте их как целые числа, где $ 3,59 сохраняется как 359, а 400 - как 40000). Это хорошая идея? Что если мои входные данные позже изменятся и потребуют большей точности?

Ответы [ 5 ]

23 голосов
/ 16 июля 2010

Учитывая, что SQLite 3 будет использовать до 8 байтов для хранения типов INTEGER , если только вы не собираетесь иметь числа больше 10 ^ 16, с вами все будет в порядке.

Чтобы представить это в перспективе, мировой валовой внутренний продукт, выраженный в тысячных долях доллара США (мельница), составляет около 61 000 000 000 000 000, что выражается в sqlite3.

sqlite> create table gdp (planet string, mills integer);
sqlite> insert into gdp (planet, mills) values ('earth', 61000000000000000000);
sqlite> select * from gdp;
earth|61000000000000000000

Если вы не занимаетесь межпланетным учетом, я не думаю, что вам стоит волноваться.

1 голос
/ 11 февраля 2011

В финансовом программном обеспечении валюта всегда представлена ​​как точка с фиксированной запятой (десятичная). Вы можете эмулировать его в SQLite, используя целые числа (64-разрядное целое число содержит до 18 цифр).

0 голосов
/ 21 сентября 2016

SQLite не имеет поля BigDecimal. Поэтому я использую тип SQLite Integer и конвертирую следующим образом: BigDecimal bd = new BigDecimal ("1234.5678");int packInt = bd.scaleByPowerOfTen (4) .intValue ();// packInt now = 12345678 Теперь сохраняем packInt в поле SQLite Integer.Чтобы вернуться к BigDecimal: BigDecimal bd = new BigDecimal (packInt);// bd = 12345678 bd = bd.scaleByPowerOfTen (-4);// сейчас bd = 1234.5678

0 голосов
/ 10 октября 2015

лучшая валюта DataType равна BigDecimal, и в sqlite вы можете сохранить его как VARCHAR поле

или преобразовать BigDecimal в строку при сохранении.

ormlite docдля BigDecimal

0 голосов
/ 16 июля 2010

Я бы сказал, строка / текст. Вы всегда можете преобразовать его в любую культуру, если вам это нужно.

...