在SQLite3中存储货币值

时间:2010-07-16 01:01:42

标签: sqlite currency

我在我的应用程序中处理了许多不同的货币,我想知道将它们存储在SQLite3数据库中的“最佳”方式是什么。

我倾向于定点表示(即将它们存储为整数,其中$ 3.59存储为359,¥400存储为40000)。这是一个好主意吗?如果我的输入数据稍后改变并需要更高的精度怎么办?

5 个答案:

答案 0 :(得分:23)

鉴于SQLite 3将使用最多8个字节来存储INTEGER类型,除非你的数字大于10 ^ 16,否则你应该没问题。

从正确的角度来看,以千分之一美元(一个磨坊)表示的世界国内生产总值约为61'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 :(得分:1)

在财务软件中,货币始终表示为定点(十进制)。 您可以使用整数在SQLite中模拟它(64位整数最多可容纳18位数字)。

答案 2 :(得分:-1)

我会说字符串/文字。如果您还需要这样做,您可以随时将其转换为任何文化。

答案 3 :(得分:-1)

最佳货币DataType为BigDecimal,在sqlite中您可以将其存储为VARCHAR字段

ormlite在存储时将BigDecimal转换为字符串。

ormlite doc for BigDecimal

答案 4 :(得分:-2)

SQLite没有BigDecimal字段 所以我使用SQLite Integer类型并像这样转换: BigDecimal bd = new BigDecimal(" 1234.5678"); int packedInt = bd.scaleByPowerOfTen(4).intValue(); // packedInt now = 12345678 现在将packedInt保存到SQLite Integer字段。 要返回BigDecimal: BigDecimal bd = new BigDecimal(packedInt); // bd = 12345678 bd = bd.scaleByPowerOfTen(-4); //现在bd = 1234.5678