【问题标题】:Storing 'long' type in firebase在firebase中存储“长”类型
【发布时间】:2015-08-10 22:47:01
【问题描述】:

我们有一个由 Core Data 支持的 iPhone 应用程序。我们在核心数据存储中使用 int64,我想知道我们是否需要做任何特别的事情来将数字存储在 firebase 中。我想知道这一点,因为 javascript 不支持 64 位无符号整数。我们还在编写一个 javascript 应用程序,它必须读取这个数字。

我能想到的一种方法是将其存储为字符串,然后在 iPhone 客户端上将其转换为 int64。然而,这似乎有点乏味,firedata 似乎并不直接支持这样的翻译。我们还必须在 Firebase 中对该属性添加验证 - 因此验证将是一个只有数字的字符串,而不是数字。

有人遇到过这些问题吗?针对此问题的推荐方法是什么?

【问题讨论】:

    标签: javascript ios firebase


    【解决方案1】:

    这确实是一个棘手的情况。首先只是为了说明情况(我认为您已经意识到这一点,但只是为了避免任何混淆):

    • Firebase 可以/将精确存储 64 位整数。
    • Android 和 iOS 客户端可以毫无问题地交互(读取和写入)64 位整数。
    • JavaScript 将所有数字存储为 64 位浮点数,这意味着它只能精确表示高达 ~2^52 的整数。 2^52 和 2^64 之间的整数可能会丢失精度(四舍五入到可以用 64 位浮点数表示的最接近的整数)。

    至于你的选择,我怀疑你也能很好地处理这些,但你可以:

    • 容忍精度损失。有时这没关系。例如,也许您可​​以保证不会存储超过 2^52 的整数,因此精度损失实际上不会成为问题。或者也许你只需要从 JS 中查看数据,一些四舍五入就可以了。需要注意的一件事是,如果您从 JS 读取数据并将其写回,则数据将被写回 Firebase,但精度会有所下降。
    • 将数字存储为字符串。 正如您所建议的,您可以将数字存储为字符串。但这可能会带来不便,并且会限制您可以在安全规则中进行的验证。
    • 将数字拆分为 2 个 32 位整数。 您可以将高 32 位与低 32 位分开存储。这可能不方便,但可以让您保持精度并在安全规则中进行一些数字验证。

    可能还有其他选项,但这些是立即浮现在脑海中的选项。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多