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

标签 javascript ios firebase

我们有一个由 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/

相关文章:

javascript - MySQL 到列表/选择框,但有一些变化

javascript - 使用 "use strict"和可变范围

ios - 在 TableView Controller 中水平滚动 UITableView

ios - 跨整个应用程序的 AFNetworking 可达性监听器

Firebase 存储 - 限制用户上传到 Firebase 存储的图像大小

firebase - 如何在 Firebase 应用中获取 Cloud Storage 中所有文件的列表?

javascript - 带变量查询的 AJAX 调用 (POST)(纯 JavaScript)

JavaScript 整数溢出

iphone - 音频文件类型之间的区别

即使重新上线后,尝试离线登录时仍会出现 Firebase Auth 错误