使用 RapidJSON 舍入 double 类型
Rounding a double type with RapidJSON
我正在使用 RapidJSON (https://github.com/miloyip/rapidjson) 创建相当大的数组(~ 5 MB),并且很多 space 由于浮点数过于精确而被浪费。
例如
StringBuffer s;
Writer<StringBuffer> writer(s);
writer.StartObject();
writer.String("value");
writer.Double(1.0/3.0);
writer.EndObject();
这会导致 json“{'value': 0.33333333333}”,这在我只需要几个有效数字时非常烦人。
我在这个 post 中找到了一个解决方案 Set floating point precision using rapidjson,但它已经有几年的历史了,并且在最新的快速 json 构建中已经过时了。有人对此有解决方案吗?
目前Writer
始终生成浮点数的精确字符串表示,在某种意义上,解析输出可以恢复原始值。
您可以在 this 上尝试解决方法。如果您想请求在 RapidJSON 中提供此功能,请在此处发表评论,我们可以进一步讨论。
使用rapidjson::Writer::SetMaxDecimalPlaces
http://rapidjson.org/classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634
writer.SetMaxDecimalPlaces(3);
writer.Double(1.0/3.0);
我正在使用 RapidJSON (https://github.com/miloyip/rapidjson) 创建相当大的数组(~ 5 MB),并且很多 space 由于浮点数过于精确而被浪费。 例如
StringBuffer s;
Writer<StringBuffer> writer(s);
writer.StartObject();
writer.String("value");
writer.Double(1.0/3.0);
writer.EndObject();
这会导致 json“{'value': 0.33333333333}”,这在我只需要几个有效数字时非常烦人。
我在这个 post 中找到了一个解决方案 Set floating point precision using rapidjson,但它已经有几年的历史了,并且在最新的快速 json 构建中已经过时了。有人对此有解决方案吗?
目前Writer
始终生成浮点数的精确字符串表示,在某种意义上,解析输出可以恢复原始值。
您可以在 this 上尝试解决方法。如果您想请求在 RapidJSON 中提供此功能,请在此处发表评论,我们可以进一步讨论。
使用rapidjson::Writer::SetMaxDecimalPlaces http://rapidjson.org/classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634
writer.SetMaxDecimalPlaces(3);
writer.Double(1.0/3.0);