要为具有最大精度但没有尾随零的JSON格式化双精度,我们使用%.15g
。但是,为了区分整数和实数,我们希望用至少一个数字格式化双精度数,即"%.1f"
,但科学记数法中的数字除外(根据定义,它们是双精度数)。
有没有办法在单个snprint format
中实现此功能?
double val;
char buf[32];
if(fabs(val) < 1e15 && !fmod(val, 1)){
// whole numbers get at least one decimal
snprintf(buf, 32, "%.1f", val);
} else {
// automatically detemines decimal or scientific notation
snprintf(buf, 32, "%.15g", val);
}
答案 0 :(得分:0)
只需使用转化说明符g
,并在字符串末尾添加.0
,如果字符串只包含符号和数字字符。 yajl
库有example implementation:
char buf[32];
sprintf(buf, "%.20g", val);
if (strspn(buf, "0123456789-") == strlen(buf)) {
strcat(buf, ".0");
}