Estoy considerando escribir dos alternativas de precisión limitadas a BigDecimal, a saber, DecimalInt y DecimalLong. Estos serían capaces de tratar con números dentro de los límites reales de int y long con un número arbitrario de decimales, creables en forma mutable e inmutable. Mi plan es hacer que DecimalInt soporte +/- 999,999,999 a +/- 0,999999999 y DecimalLong igual, pero con hasta 18 dígitos.Clase decimal Java liviana
Esto se realizaría manteniendo un valor de recuento de dígitos decimales de 0-9 para DecimalInt y 0-18 para DecimalLong junto con el valor real almacenado como una escala int o larga. El uso normal sería para números pequeños de decimales, como por ejemplo dinero y precios de acciones, generalmente 2-4 lugares decimales.
Los requisitos esenciales son (a) espacio reducido (2 clases, más OverflowException), y (b) soporte completo de todas las operaciones básicas más todas las matemáticas que tengan sentido.
La búsqueda de resultados en Google no arrojó ningún resultado obvio: todos parecían pertenecer a decimales arbitrarios.
Mis preguntas son: ¿Ya se ha hecho esto? ¿Hay sutilezas ocultas en esto y por eso todavía no se ha hecho? ¿Alguien ha escuchado rumores de que Java sea compatible con un tipo decimal como el de DotNet?
EDITAR: Esto es diferente de BigDecimal porque debería ser (a) mucho más eficiente no tratar con un conjunto de operaciones, y (b) no ajustará BigInteger para que sea más simple en memoria también, y (c) tendrá una opción mutable por lo que será más rápido allí también. En resumen, menos sobrecarga para casos de uso simple como "Quiero almacenar un saldo bancario sin la sobrecarga de BigDecimal y la inexactitud del doble".
EDIT: Tengo la intención de hacer todas las matemáticas usando int o largo para evitar el problema clásico de: 1586,60-708,75 = 877.8499999999999 en lugar de 877,85
"ha sido esto ha hecho?" ¿Qué es diferente acerca de tus clases propuestas y BigDecimal? –
Cuando dice "con un número arbitrario de lugares decimales", ¿quiere decir que tiene un número fijo de decimales en mente o que desea poder admitir cualquier cantidad de lugares decimales? – DJClayworth
Probablemente hubiera sido más rápido escribirlo que tener que tratar con personas que malinterpretan su pregunta aquí. – jmucchiello