我在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,但仍然遇到了同样的问题。
由于
答案 0 :(得分:1)
这不是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
//}