c++ - Jsoncpp 没有正确读取指数

标签 c++ json parsing jsoncpp

我正在使用 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
//}

关于c++ - Jsoncpp 没有正确读取指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956811/

相关文章:

c# - 解析 Json facebook c#

c++ - Qt Creator - Project ERROR : Xcode not set up properly. 您可能需要通过运行/usr/bin/xcodebuild 来确认许可协议(protocol)

c++ - __has_trivial_copy 在 clang 和 gcc 中的行为不同。谁是对的?

c++ - 计算 thrust::device_vector 上的梯度

Java 在不同的类中使用解析后的 xml

PHP:定义与 HTML 标签兼容的相对路径

c++ - 令人困惑的联盟结构

java - 检索js中嵌套对象的JSON

json - 如何将每个文档的 json 拆分为多个文件

json - MongoDB。如何更新数组内的json属性