gpt4 book ai didi

javascript - 在 firebase 中存储 'long' 类型

转载 作者:可可西里 更新时间:2023-11-01 17:05:36 27 4
gpt4 key购买 nike

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

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

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

最佳答案

这确实是一个棘手的情况。首先只是为了弄清楚情况(我想你已经意识到这一点,但只是为了避免混淆):

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

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

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

可能还有其他选择,但我会立即想到这些。希望这对您有所帮助!

关于javascript - 在 firebase 中存储 'long' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com