问一个 rust 里处理 Mongodb 中 Decimal128 数据的问题

2023-01-02 10:54:47 +08:00
 MonTubasa

在 mongo 里有一堆数据,大概长这个样子

[{"versions": {"version1": {"app": Decimal128(1.1)}}}]

通过 rust-mongo 库获取到的数据是 bson::Decimal128 这个类型,这个类型不能直接操作,甚至都打印不出来数值是多少。 直接序列化成 json 输出是这样的。

[{"versions": {"version1": {"app": "$numberDecimalBytes": [10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 48]}}}]

大概是我英语太差了,手册都要翻烂了,都没看到在哪里能对这个数据类型进行操作。 希望大佬能指条路,如何获取 Decimal128 中的浮点数,或者有什么方法能够对其进行比较或者加减运算的。

1164 次点击
所在节点    Rust
4 条回复
toomoy
2023-01-02 13:31:27 +08:00
来自 chat.openAi 的回答
处理 MongoDB 中的 Decimal128 数据可以使用 MongoDB Rust 客户端库中提供的 Decimal 类型。你可以使用以下方式获取该类型:

Copy code
use bson::decimal128::Decimal128;

let decimal = Decimal128::new(12345, 2);
PTLin
2023-01-04 18:10:30 +08:00
现在这个类型操作不了,代码的注释里写了现在只能用于交互 https://docs.rs/bson/2.4.0/src/bson/decimal128.rs.html#7
并且附带一提这个类型里面的 128 位的数据貌似不是 IEEE 754-2008 的标准浮点数编码,所以用其他库比如 rust_decimal 也没用。
PTLin
2023-01-04 18:21:28 +08:00
@toomoy 虽然知道伙计是好心但是 openai 的回答还是别发了吧,比如你这个答案 Decimal128 类型压根就没有 new 方法。。。
MonTubasa
2023-01-05 11:07:43 +08:00
@PTLin 我尝试自己写一个字符转换的工具,然后就发现这东西有点离谱。后面在 Mongo 中获取数据的地方把 Decimal128 转换成字符串在项目里用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/906021

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX