首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Jansson中为实数指定要输出的数字数

如何在Jansson中为实数指定要输出的数字数
EN

Stack Overflow用户
提问于 2015-07-07 16:49:34
回答 1查看 1.2K关注 0票数 3

当使用Jansson的json_dumps或json_dumpf()输出实数时,如何指定小数点后输出的固定数字数?

我尝试了Jansson的新JSON_REAL_PRECISION标志,但这指定了最大有效位数,而不是小数点之后的固定位数。

基本上,我在Jansson中寻找类似于C中对printf的调用(预期输出为123.12346)的内容:

代码语言:javascript
复制
printf("%.5f", 123.123456789);

编辑

下面是一些示例代码来说明我迄今为止尝试过的输出样式(需要Jansson 2.7+):

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
Output of json_dumps() for 123.123456789: {"foo": 123.123456789}
Again, but using JSON_REAL_PRECISION(5) : {"foo": 123.12}

同样,我需要一种在小数点之后输出固定数字的方法(例如,123.12346),有人知道如何实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2018-05-04 13:52:23

我意识到这是一个老问题,但最近我试图将json数据限制在最多小数点2位,我最初以为我可以使用JSON_REAL_PRECISION来完成这个任务,但后来意识到这是行不通的。

这里有一个可能对你有效的解决方案(或者我应该说,可能已经奏效):

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31274738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档