Storing currency values in SQLite3

前端 未结 5 1350
萌比男神i
萌比男神i 2020-12-15 22:26

I\'m dealing with lots of different currencies in my application, and I want to know what the \"best\" way is to store them in an SQLite3 database.

I\'m leaning towa

相关标签:
5条回答
  • 2020-12-15 22:44

    best currency DataType is BigDecimal and in sqlite you can store it as a VARCHAR field

    ormlite convert BigDecimal to string when you store it.

    ormlite doc for BigDecimal

    0 讨论(0)
  • 2020-12-15 22:50

    Given that SQLite 3 will use up to 8 bytes to store INTEGER types, unless you are going to have numbers greater than 10^16, you should be just fine.

    To put this in perspective, the world gross domestic product expressed in thousandths of a USD (a mill) is about 61'000'000'000'000'000 which sqlite3 has no problem expressing.

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

    Unless you are handling interplanetary accounting, I don't think you have to worry.

    0 讨论(0)
  • 2020-12-15 22:53

    In financial software currency is always represented as fixed-point (decimal). You can emulate it in SQLite using integers (64-bit integer holds up to 18 digits).

    0 讨论(0)
  • 2020-12-15 22:53

    SQLite has no BigDecimal field So I use the SQLite Integer type and convert like so: BigDecimal bd = new BigDecimal("1234.5678"); int packedInt = bd.scaleByPowerOfTen(4).intValue(); // packedInt now = 12345678 Now save packedInt to SQLite Integer field. To go back to BigDecimal: BigDecimal bd = new BigDecimal(packedInt); // bd = 12345678 bd = bd.scaleByPowerOfTen(-4); // now bd = 1234.5678

    0 讨论(0)
  • 2020-12-15 22:57

    I'd say string/text. You can always convert it to whatever culture if you need to do that as well.

    0 讨论(0)
提交回复
热议问题