一尘不染

C ++中的Json:将数字解析为字符串,以避免浮点数错误

json

我正在处理一种加密货币RPC并接收json数据,如下所示:

{
  ...
  "amount": 1.34000000,
  "confirmations": 230016,
  "spendable": true,
  "solvable": true
  ...
}

使用Jsoncpp库或json11会将数字解析为double。发生这种情况时,1.3400000000000001由于双重精度问题,结果为:。总的来说,这对金融交易来说是灾难性的,是不可接受的。

我已经有一个定点库,可以使用有效的字符串并将其在内部视为整数。有没有一种方法可以使Jsoncpp(或其他任何json库)将选定的数字json值用作字符串,以便可以使用固定精度正确地对待它们?


阅读 250

收藏
2020-07-27

共1个答案

一尘不染

json库中似乎没有解决方案,因此我必须自己修改数字并用引号将其包装。我将此功能应用到了响应中。

[](std::string& jsonStr) {
        // matches "amount" field in json
        static std::regex reg(R"((\s*\"amount\"\s*:)\s*(\d*\.{0,1}\d{0,8})\s*)");
        jsonStr = std::regex_replace(jsonStr, reg, "$1\"$2\"");
    };

现在它可以正常工作了。

2020-07-27