当使用Jansson的json_dumps或json_dumpf()输出实数时,如何指定小数点后输出的固定数字数?
我尝试了Jansson的新JSON_REAL_PRECISION标志,但这指定了最大有效位数,而不是小数点之后的固定位数。
基本上,我在Jansson中寻找类似于C中对printf的调用(预期输出为123.12346)的内容:
printf("%.5f", 123.123456789);编辑
下面是一些示例代码来说明我迄今为止尝试过的输出样式(需要Jansson 2.7+):
#include <stdio.h>
#include <jansson.h>
int main(int argc, char* argv[])
{
json_t *json = json_object();
json_object_set_new(json, "foo", json_real(123.123456789));
printf("Output of json_dumps() for 123.123456789: %s\n", json_dumps(json, 0));
printf("Again, but using JSON_REAL_PRECISION(5) : %s\n", json_dumps(json, JSON_REAL_PRECISION(5)));
return 0;
}输出:
Output of json_dumps() for 123.123456789: {"foo": 123.123456789}
Again, but using JSON_REAL_PRECISION(5) : {"foo": 123.12}同样,我需要一种在小数点之后输出固定数字的方法(例如,123.12346),有人知道如何实现这一点吗?
发布于 2018-05-04 13:52:23
我意识到这是一个老问题,但最近我试图将json数据限制在最多小数点2位,我最初以为我可以使用JSON_REAL_PRECISION来完成这个任务,但后来意识到这是行不通的。
这里有一个可能对你有效的解决方案(或者我应该说,可能已经奏效):
#include <stdio.h>
#include <jansson.h>
#include <math.h>
int main(int argc, char* argv[])
{
json_t *json = json_object();
json_object_set_new(json, "foo", json_real(round(100000 * 123.123456789) / 100000));
printf("Output of json_dumps() for 123.123456789: %s\n", json_dumps(json, 0));
printf("Again, but using JSON_REAL_PRECISION(5) : %s\n", json_dumps(json, JSON_REAL_PRECISION(5)));
return 0;
}https://stackoverflow.com/questions/31274738
复制相似问题