Sto utilizzando il seguente codice per arrotondare a 2DP:Arrotondamento raddoppia - 0,5 - sprintf
sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
Si arrotonda con successo 6,666-6,67, ma non funziona correttamente quando si aggira 5.555. Restituisce 5.55, mentre dovrebbe (almeno a mio parere) restituire 5.56.
Come posso ottenerlo per arrotondare quando la cifra successiva è 5? ad es. restituisce 5.56.
modifica: Ora mi rendo conto che questo sta accadendo perché quando inserisco 5.555 con cin diventa salvato come 5.554999997.
Ho intenzione di provare l'arrotondamento in due fasi: prima su 3dp e poi su 2dp. altre idee (più eleganti)?
Questo sembra un po 'più affidabile l'idea di aggiungere 0,0005, ma entrambi funzionerebbe immagino. Grazie per l'aiuto! – Meir
Sembra un bug, davvero. 5.5551 viene arrotondato correttamente! – ypnos
Non è bacato, @ypnos, non devi ancora superare i limiti del punto mobile. 5.5551 è rappresentato come 5.555100000000000370 ... che andrà a finire, 5.555 è reputato come 5.5549999999 ... che andrà a fondo. Puoi vedere che si tratta di un problema di rappresentazione provando il tuo codice con 5.5500000000000000001 - entrambi gli output sono 5.55 errati in quel caso perché il numero NON è 5.55.000 ... 1 quando è memorizzato. E '5.549999 ... – paxdiablo