Sobre usar enteros
Mientras que los tipos enteros son normalmente binarios y por definición no soportan fracciones, son exactos (no hay errores de redondeo cuando se convierten desde enteros decimales) y se pueden usar como una suerte de tipo decimal «casero» eligiendo implícitamente un punto decimal fijo de tal forma que la unidad más pequeña con la que estés trabajando se pueda representar por el entero 1. En la práctica, esto normalmente se expresa como: «Para manejar dinero, almacena y calcula todo en céntimos y solo formatea el resultado».
Esto funciona, pero tiene algunas desventajas importantes:
- Supone más trabajo (y más oportunidades de introducir bugs) hacerlo bien, especialmente en lo que concierne a los métodos de redondeo.
- Los enteros tienen precisión completa, pero en un rango muy limitado, y cuando se desbordan, normalmente «dan la vuelta» silenciosamente: el mayor entero más 1 da cero (para enteros sin signo) o el valor negativo más grande en valor absoluto (para enteros con signo). Este es el peor comportamiento posible cuando se trabaja con dinero por razones obvias.
- El punto decimal implícito es difícil de cambiar y enormemente inflexible: si almacenas los dólares como céntimos, es simplemente imposible soportar el dinar bareiní(1 dinar = 1000 fils) al mismo tiempo. Tendrías que almacenar la posición del punto decimal con los datos ─ el primer paso para implementar tu propio formato de punto flotante decimal de precisión limitada (lleno de fallos y no estándar).
Resumen: no se recomienda usar enteros. Haz esto solamente si no hay otra alternativa mejor.
© Publicado en http://puntoflotante.org/ bajo una licencia Creative Commons Atribución Unported (BY). Original en inglés por Michael Borgwardt en http://floating-point-gui.de/.