格式化double,printf中至少有一个小数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式化double,printf中至少有一个小数相关的知识,希望对你有一定的参考价值。
要为具有最大精度但没有尾随零的JSON格式化double,我们使用%.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);
}
答案
只需使用转换说明符g
,并在字符串末尾添加.0
,如果字符串只包含符号和数字字符。 yajl
图书馆有一个example implementation:
char buf[32];
sprintf(buf, "%.20g", val);
if (strspn(buf, "0123456789-") == strlen(buf)) {
strcat(buf, ".0");
}
以上是关于格式化double,printf中至少有一个小数的主要内容,如果未能解决你的问题,请参考以下文章