gpt4 book ai didi

c - 如何在 Jansson 中指定要输出实数的位数

转载 作者:行者123 更新时间:2023-12-02 02:36:32 25 4
gpt4 key购买 nike

使用 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),有人知道如何实现这一点吗?

最佳答案

我意识到这是一个老问题,但我最近试图将 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;
}

关于c - 如何在 Jansson 中指定要输出实数的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31274738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com