Come impostare la precisione in virgola mobile all’interno di una variabile

Attualmente sto lavorando a un programma in cui ho bisogno di calcolare un valore arrotondato a sole 2 cifre dopo un punto variabile. Dì, l’ho dichiarato

float a; 

Se a = 3.555 allora memorizzerebbe a = 3.56 , arrotondando per eccesso.

Per a = 3.423 , il valore di a sarebbe a = 3.423 , nessun cambiamento.

Posso fare questo per stampare l’output, ma cosa devo fare quando lo memorizzo in una variabile e usare quella variabile per qualche altro calcolo?

Se hai bisogno di due cifre dopo il punto decimale, non utilizzare il virgola mobile. Utilizzare invece un numero di punto fisso. Ad esempio, basta usare un numero intero che è 100 volte più grande del numero decimale che si desidera rappresentare. Cercare di adattare un numero in virgola mobile di base 2 a regole di arrotondamento come questa non produrrà risultati soddisfacenti per te.

  double d = 5000.23423; d = ceil(d*100)/100; cout << d << endl; // prints : 5000.24 double e = 5000.23423; e = floor(e*100)/100; cout << e << endl; // prints : 5000.23 

Puoi farlo:

 a = roundf(a*100)/100; 

Che ne dite di

 #include  int main () { double a, f, i; a = 3.436; f= modf(a, &i); a = i + roundf(f* 100.0) / 100.0; return 0; } 

Funziona su doppio ma evita di ridimensionare l’intero numero.

Aggiornamento : aggiunta la divisione mancante.