删除 C 中浮动的无用 0

-3 c floating-point

如何删除不会影响数值的零

 float X1 = (-b + sqrt(pow(b,2) - (4*a*c)))/(2*a);
Run Code Online (Sandbox Code Playgroud)

有时如果 X1 是一个没有小数的数字,X1=4.0000 我将如何避免这种情况

{编辑}

BLU*_*IXY 5

选项1

使用%g的printf

除非要求替代表示,否则尾随零将被删除,如果没有小数部分,小数点字符也会被删除。

代码示例:

double x = 4.0;
printf("DEBUG:%f\n", x);
printf("X1=%g\n", x);
Run Code Online (Sandbox Code Playgroud)

输出:

DEBUG:4.000000
X1=4
Run Code Online (Sandbox Code Playgroud)

选项#2

将其输出为字符串并进行处理。

代码示例:

double x = 4.0;
char buff[48];
int len;
len = snprintf(buff, sizeof buff, "%.4f", x);
printf("DEBUG:%s\n", buff);
char *p = buff + len -1;
while(*p == '0'){
    *p-- = 0;
}
if(*p == '.')
    *p = 0;
printf("X1=%s\n", buff);
Run Code Online (Sandbox Code Playgroud)

输出:

DEBUG:4.0000
X1=4
Run Code Online (Sandbox Code Playgroud)