我正在处理一种加密货币RPC并接收json数据,如下所示:
{ ... "amount": 1.34000000, "confirmations": 230016, "spendable": true, "solvable": true ... }
使用Jsoncpp库或json11会将数字解析为double。发生这种情况时,1.3400000000000001由于双重精度问题,结果为:。总的来说,这对金融交易来说是灾难性的,是不可接受的。
double
1.3400000000000001
我已经有一个定点库,可以使用有效的字符串并将其在内部视为整数。有没有一种方法可以使Jsoncpp(或其他任何json库)将选定的数字json值用作字符串,以便可以使用固定精度正确地对待它们?
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\""); };
现在它可以正常工作了。