使用 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);