如果num在C中小数点后没有数字,则浮点为int

如果num在C中小数点后没有数字,则浮点为int,c,C,我应该如何打印浮点数,使其在小数点后没有数字。例如,11.00应打印为11,但11.45应保持不变。问题可能是一些if语句。有什么建议吗?以下是我的解决方案: #include <stdio.h> void printDouble(double fp); int main(void) { printDouble(11.0); printDouble(11.45); } void printDouble(double fp) { double _fp;

我应该如何打印浮点数,使其在小数点后没有数字。例如,11.00应打印为11,但11.45应保持不变。问题可能是一些if语句。有什么建议吗?

以下是我的解决方案:

#include <stdio.h>

void printDouble(double fp);

int main(void)
{
    printDouble(11.0);
    printDouble(11.45);
}

void printDouble(double fp)
{
    double _fp;
    char buffer[40];
    int i = 0;
    do{
        sprintf(buffer, "%.*lf", i, fp);
        sscanf(buffer, "%lf", &_fp);
        i++;
    } while(fp != _fp);
    puts(buffer);
}

也许这有点低效,但它确实有效。无论如何,你不需要经常打印浮点数。

我想到的第一个解决方案是cast。 这就是我要做的。 假设您的变量是“a”,您希望打印它

    float a;

    if (if (a-(int)a<0.001 || (int)a-a<0.001) ) //1st comment explains this 
       printf("%d", (int)a);
    else
       printf("%f", a);
float a;

if(if(a-(int)a您尝试了什么?您希望打印多少个小数位。假设您有
1.124
或七分之一
0.14285714285714285714
printf(“%g\n”,var)
其中
var
是变量的名称。顺便说一句,如果这是关于货币的,那么您不应该将钱存储在浮动中。可能的%e副本不会显示浮动的整数表示形式,它使用科学的表示法。因此,当fp=100000.0时,%g将显示1.0e+5,而不是100000,这是OP要求的。
if
语句中出现的问题意味着问题应该用手来解决,而不是通过函数来解决。@DaveKnight Answer modifiedIf a是123.000001,这是行不通的。总是比较一些最小值,所以:
if(a-(int)谢谢你的建议,Paul。我完全忘记了这一点。
    float a;

    if (if (a-(int)a<0.001 || (int)a-a<0.001) ) //1st comment explains this 
       printf("%d", (int)a);
    else
       printf("%f", a);