繁体   English   中英

Jsoncpp无法正确读取指数

[英]Jsoncpp not reading exponents correctly

我正在使用C ++中的json并决定尝试Jsoncpp。 在我的json中,我有一些采用科学计数法的值,其中包含负指数,例如4.0e-06。 当我去解析这个json字符串时,我得到了奇怪的结果。 该库似乎可以在正指数上正常运行,但是当出现负号时会失败。

以下是我用来测试此json字符串的代码示例。

#include "json/json.h"
#include <iostream> 
#include <string>

using namespace std;

int main(){

    string json_example = "{\"test\":4.0e-06, \"test2\":0.000004\"}";

    Json::Value json;
    Json::Reader reader;
    bool parsed = reader.parse(json_example, json, false);

    cout << json.toStyledString() << endl;  


}

这是我收到的输出。

{
   "test" : 3.9999999999999998e-06,
   "test2" : 3.9999999999999998e-06
}

我无法确定这是库中的错误还是执行错误。 我尝试使用旧版本的Jsoncpp,但仍然遇到相同的问题。

谢谢

这不是JsonCpp的错,只是用double格式表示该数字的问题。 您可以自己检查:

double a, b, c, d, e, f;
a = json["test"].asDouble(); // 3.9999999999999998e-006
b = json["test2"].asDouble(); // 3.9999999999999998e-006
c = boost::lexical_cast<double>("4.0e-06"); // 3.9999999999999998e-006
d = boost::lexical_cast<double>("0.000004"); // 4.0000000000000007e-006 (!)
sscanf("4.0e-06", "%lf", &e); // 3.9999999999999998e-006
sscanf("0.000004", "%lf", &f); // 3.9999999999999998e-006

...但是奇怪的是,当我将JSON转换回字符串时,我得到了:

std::string test = json.toStyledString();

//{
//   "test" : 4.000000000000000e-006,
//   "test2" : 4.000000000000000e-006
//}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM