Use printf to format floats without decimal places if only trailing 0s

后端 未结 3 1509
滥情空心
滥情空心 2020-12-08 18:55

Is it possible to format a float in C to only show up to 2 decimal places if different from 0s using printf?

Ex:

12 => 12

12.1 => 12.1

12.12

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-08 19:28

    From our discussion in the above answer here is my program that works for any number of digits before the decimal.

    #include 
    #include 
    #include 
    
    int main() {
        float f1 = 12.13;
        float f2 = 12.245;
        float f3 = 1242.145;
        float f4 = 1214.1;
    
        int i = 0;
        char *s1 = (char *)(malloc(sizeof(char) * 20));
        char *s2 = (char *)(malloc(sizeof(char) * 20));
    
        sprintf(s1, "%f", f1);
        s2 = strchr(s1, '.');
        i = s2 - s1;
        printf("%.*g\n", (i+2), f1);
    
        sprintf(s1, "%f", f2);
        s2 = strchr(s1, '.');
        i = s2 - s1;
        printf("%.*g\n", (i+2), f2);
    
        sprintf(s1, "%f", f3);
        s2 = strchr(s1, '.');
        i = s2 - s1;
        printf("%.*g\n", (i+2), f3);
    
        sprintf(s1, "%f", f4);
        s2 = strchr(s1, '.');
        i = s2 - s1;
        printf("%.*g\n", (i+2), f4);
    
        free(s1);
        free(s2);
    
        return 0;
    }
    

    And here's the output

    12.13
    12.24
    1242.15
    1214.1
    

提交回复
热议问题