estoy usando el siguiente código para el redondeo a 2DP:Redondeo duplica - 0,5 - sprintf
sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
Se redondea con éxito 6.666 a 6.67 pero no funciona correctamente cuando el redondeo 5.555. Devuelve 5.55, mientras que debería (al menos en mi opinión) devolver 5.56.
¿Cómo puedo hacer para redondear cuando el siguiente dígito es 5? es decir, devolver 5.56.
editar: Ahora me doy cuenta de que esto está sucediendo porque cuando ingreso 5.555 con cin se obtiene guardado como 5.554999997.
Voy a intentar redondear en dos etapas: primero a 3dp y luego a 2dp. cualquier otra idea (más elegante)?
Esto parece un poco más fiable que la idea de añadir 0,0005, pero ambos funcionaría supongo. ¡Gracias por tu ayuda! – Meir
Parece ser un error, de verdad. ¡5.5551 se redondea correctamente! – ypnos
No es un error, @ypnos, aún no alcanzas los límites del punto flotante. 5.5551 se representa como 5.555100000000000370 ... que redondeará, 5.555 se representa como 5.5549999999 ... que redondeará hacia abajo. Puede ver que es un problema de representación al probar su código con 5.5500000000000000001; ambas salidas son 5.55 incorrectas en ese caso porque el número NO ES 5.55000 ... 1 cuando está almacenado. Es 5.549999 ... – paxdiablo