我在我的应用程序中处理了许多不同的货币,我想知道将它们存储在SQLite3数据库中的“最佳”方式是什么。
我倾向于定点表示(即将它们存储为整数,其中$ 3.59存储为359,¥400存储为40000)。这是一个好主意吗?如果我的输入数据稍后改变并需要更高的精度怎么办?
答案 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转换为字符串。
答案 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