2016-03-24 9 views
5

come dovrei stampare un float in modo tale che non abbia numeri dietro il punto decimale, ad es. 11,00 dovrebbe essere stampato come 11 ma 11,45 dovrebbe rimanere lo stesso. Il problema è un po 'se la dichiarazione forse. Eventuali suggerimenti?Float to int se num non ha numeri dietro il punto decimale in C

+4

Cosa hai provato? E quanti decimali vuoi stampare. Supponiamo di avere '1.124' o un settimo' 0.14285714285714285714285714285714'? –

+4

'printf ("% g \ n ", var);' dove 'var' è il nome della variabile. –

+0

Dai uno sguardo [qui] (http://stackoverflow.com/a/5913115/3436922) – LPs

risposta

0

Ecco la mia soluzione:

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

uscita:

11 
11.45 

Forse questo è un po 'inefficiente, ma fa lavoro. Ad ogni modo, non è necessario stampare frequentemente numeri a virgola mobile.

+0

% e non mostra una rappresentazione intera di un float, utilizza la notazione scientifica. Pertanto, con fp = 100000.0,% g mostrerà 1.0e + 5, non 100000, che è ciò che l'OP sta richiedendo. –

+0

La presenza nella domanda di istruzioni 'if' è significativa che il problema dovrebbe essere risolto a mano, piuttosto che attraverso una funzione. – edmz

+0

@DaveKnight Risposta modificata –

2

La prima soluzione che mi viene in mente è il cast. Questo è quello che vorrei fare. Diciamo che la tua variabile è "a", che vuoi stampare.

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

Se a è 123.000001, questo non funzionerà. Confronta sempre con un minimo, quindi: 'if (a- (int) a <0.001 || (int) a-a <0.001) ...' –

+0

Grazie per un consiglio, Paul. L'ho completamente dimenticato. –

Problemi correlati