2016-03-24 10 views
5

jak mam wydrukować float tak, jakby nie miał liczb za kropką dziesiętną np. 11.00 należy wydrukować jako 11, ale 11,45 powinno pozostać bez zmian. Problem może być, jeśli może być stwierdzeniem. Jakieś sugestie?Float do int, jeśli num nie ma cyfr za kropką dziesiętną w C

+4

Czego próbowałeś? I ile miejsc dziesiętnych chcesz wydrukować. Załóżmy, że masz '1.124' lub jeden siódmy' 0.14285714285714285714285714285714'? –

+4

'printf ("% g \ n ", var);' gdzie 'var' jest nazwą zmiennej. –

+0

Spójrz [tutaj] (http://stackoverflow.com/a/5913115/3436922) – LPs

Odpowiedz

0

Oto moje rozwiązanie:

#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); 
} 

wyjściowa:

11 
11.45 

Być może jest to nieco nieefektywne, ale robi pracy. W każdym razie nie musisz często drukować liczb zmiennoprzecinkowych.

+0

% e nie pokazuje liczby całkowitej float, używa notacji naukowej. Dlatego też, przy fp = 100000,0,% g wyświetli 1.0e + 5, a nie 100000, o co prosi OP. –

+0

Obecność w pytaniu "if" ma znaczenie, że problem powinien zostać rozwiązany ręcznie, a nie poprzez funkcję. – edmz

+0

@DaveKnight Odpowiedź modified –

2

Pierwsze rozwiązanie, które przychodzi mi do głowy, zostało obsadzone. Oto co bym zrobił. Powiedzmy, że zmienna to "a", którą chcesz wydrukować.

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); 
+0

Jeśli a jest 123.000001, to nie zadziała. Zawsze porównuj do pewnego minimum, więc: 'if (a- (int) a <0.001 || (int) a-a <0.001) ...' –

+0

Dziękuję za poradę, Paul. Całkowicie o tym zapomniałem. –