V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MonTubasa
V2EX  ›  Rust

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

  •  
  •   MonTubasa · 2023-01-02 10:54:47 +08:00 · 1373 次点击
    这是一个创建于 720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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 中的浮点数,或者有什么方法能够对其进行比较或者加减运算的。

    4 条回复    2023-01-05 11:07:43 +08:00
    toomoy
        1
    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
        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
        3
    PTLin  
       2023-01-04 18:21:28 +08:00
    @toomoy 虽然知道伙计是好心但是 openai 的回答还是别发了吧,比如你这个答案 Decimal128 类型压根就没有 new 方法。。。
    MonTubasa
        4
    MonTubasa  
    OP
       2023-01-05 11:07:43 +08:00
    @PTLin 我尝试自己写一个字符转换的工具,然后就发现这东西有点离谱。后面在 Mongo 中获取数据的地方把 Decimal128 转换成字符串在项目里用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   983 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.