使用nlohmann:: JSON从JSON解析浮点数



我想通过使用nlohmann::json库从json文件中获得十进制数,并始终获得输出86700.2031而不是86700.2。首先,我使用了一个数字json类型:

{
"test": 86700.2,
}

并尝试这样做:

using json = nlohmann::json;
std::string config_path = "C:/config/default.json";
std::ifstream config_file(config_path);
json config = json::parse(config_file);
float test = config["test"]; //Output: 86700.2031

之后,我将json类型更改为字符串,并尝试使用相同的结果:

float test = std::stof(config["test"].get<std::string>()); //Output: 86700.2031

读取整数或字符串很好。我如何正确地读取浮点值?

奇怪的是,当值明显不是字符串时,标准库返回一个字符串。我会查看文档,看看你应该调用什么函数。你不应该像那样自己转换数据。

根据nlohmann图书馆的官方文档,这是图书馆的固有属性:

浮点数被四舍五入到最接近的双精度数,并以最短的表示形式序列化,以允许往返

用引号括起来更容易理解,例如

float f = 0.3;
json j = f;
std::cout << j << 'n'; // yields 0.30000001192092896.

简而言之,浮点数/双精度数被四舍五入到该数据类型中可能的最大位数。

除了将数据类型更改为std::string或移动到另一个(上述)替代方案之外,没有其他解决方案。

最新更新