代码之家  ›  专栏  ›  技术社区  ›  nornagon

在SQLite3中存储货币值

  •  13
  • nornagon  · 技术社区  · 14 年前

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

    我倾向于使用定点表示法(即将它们存储为整数,其中3.59美元存储为359美元,400美元存储为40000美元)。这是个好主意吗?如果我的输入数据后来发生了变化,需要更高的精度怎么办?

    5 回复  |  直到 14 年前
        1
  •  28
  •   msw    14 年前

    假设SQLite3将使用最多8个字节来存储 INTEGER 类型,除非您的数字大于10^16,否则您应该很好。

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

    除非你在处理行星际核算,否则我认为你不必担心。

        2
  •  2
  •   Piotr    13 年前

    在金融软件中,货币总是以定点(十进制)表示。

        3
  •  0
  •   AlvinfromDiaspar    14 年前

    我会说string/text。如果你需要的话,你可以把它转换成任何一种文化。

        4
  •  0
  •   Hamid Zandi    9 年前

    BigDecimal 在sqlite中,您可以将其存储为 VARCHAR 领域

    ormlite doc for BigDecimal

        5
  •  -2
  •   J.W.L    8 年前

    SQLite没有BigDecimal字段 BigDecimal bd=新的BigDecimal(“1234.5678”); int packedInt=bd.scaleByPowerOfTen(4).intValue();//packedInt now=12345678 要返回BigDecimal: BigDecimal bd=新的BigDecimal(packedInt);//北斗=12345678 bd=bd.scaleByPowerOfTen(-4);//现在bd=1234.5678