使用 %d 的负浮点数的 printf

printf for negative float numbers using %d

我正在尝试使用 printf 函数给出浮点变量的值,因为我只能使用 %d,这是我到目前为止所做的:

.............................
float var =0.0;
// the value will set from another function 
var *= 100000;
printf("X[%d.%04d] \n",(int)(var / 100000),((int)var)%100000));
...............

这在正浮点值下工作正常,但当我得到负值时,它将如何显示:

为:-0.4578 -> 0.-4578
正如您所说的那样,标志不在正确的位置,我的问题是是否有办法在不使用例如 switch case statemente 或类似的东西的情况下做到这一点? 提前致谢 !

您可以通过对正数和负数使用不同的格式字符串来实现:

char *format;
int v = var * 100000;
if (v < 0) {
    format = "X[-%d.%04d] \n";
    v = -v;
} else {
    format = "X[%d.%04d] \n";
}
printf(format, v/100000, v%100000);

这样 vprintf 中总是正数,并且符号嵌入到您传递的格式字符串中。仅使用 %d 格式。