【问题标题】:Storing currency in SQlite android database在 SQlite android 数据库中存储货币
【发布时间】:2012-02-08 03:44:00
【问题描述】:

我正在尝试将货币值存储在 android 的 sqlite 数据库中。我认为这里不会使用int。听说可以使用Bigdecimal。如果有人能告诉我应该如何使用它将值发送到 sqlite 数据库。

【问题讨论】:

    标签: java android eclipse sqlite


    【解决方案1】:

    将 BigDecimal 存储为字符串。

    您可以使用 toPlainString() 方法。

    BigDecimal b = new BigDecimal();
    String s = b.toPlainString();
    

    然后,当您从数据库中提取它时,您可以创建一个新的 BigDecimal。

    BigDecimal c = new BigDecimal(String s)
    

    信不信由你 SQLite 3.0 将所有数据类型存储为字符串,即使您说它应该是整数。查看this web page from the official SQLite website 并向下滚动到“Manifest Typing and BLOB Support”部分。它讨论了它将如何让您将字符串存储在其他类型的列中。

    【讨论】:

    • 我不相信你:SQLite 3.0 将整数存储为整数。旧版本 2.8 将所有内容存储为字符串。
    • 那是错误的。进入网站(我刚刚修复了链接)并搜索:不同的是,即使无法进行格式转换,SQLite 3.0 仍然会存储数据。
    • 您还应该包含该页面中的前一句:“当数据插入列时,该列将尝试将数据格式转换为列的声明类型”。当您将列声明为整数并将字符串“12345”存储到其中时,SQLite 会将该字符串转换为整数并将其存储为整数。
    • 我相信这会在您想使用聚合函数时出现问题,因为您无法聚合 STRING 列。
    【解决方案2】:

    这里只使用 Int 。由于 SQlite 使用 8 个字节作为 int,最大值为 2^64,即 1.8446744e+19 - 1,或多或少 10^18,对于货币来说足够大了。

    还有我们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2012-03-19
      • 2011-03-16
      相关资源
      最近更新 更多