我想只打印double
的小数位和C中的printf
语句。但如果它们是0,则不是第一个小数位。例如,我的双打是
double number1 = 0.95;
double number2 = 0.05;
number 1
应打印为95
,number 2
应打印为5
。
答案 0 :(得分:0)
您可以使用sprintf并跳过" 0。"从输出缓冲区。
答案 1 :(得分:0)
这样的事情:
#include <stdio.h>
#include <string.h>
const char *trailingDecimals(char *buffer, size_t bufsize, double val)
{
static const char *empty = "";
snprintf(buffer, bufsize, "%.20f", val);
char *result = strchr(buffer, '.');
if (!result) return empty;
while (*++result == '0');
char *tail = buffer + strlen(buffer) - 1;
if (*tail == '0')
{
while (*--tail == '0');
*++tail = 0;
}
return result;
}
int main(void)
{
double test = 12.00506;
char buf[64];
puts(trailingDecimals(buf, 64, test));
}
但要注意精确度问题,你可能会获得比预期更多的地方。