Estoy pensando en utilizar BigDecimal para comparar dos valores monetarios redondeados a 2 dígitos. Por ejemplo, espero que lo siguiente arroje 0 porque estoy comparando algo que debería redondear a 0.02 con algo que es 0.02. ¡Pero rinde -1! ¿Hay una manera correcta de hacer esto?BigDecimal en Java
Esto también debería funcionar para números más grandes como 123.45 vs 123.4534 ... que debería rendir 0 cuando se usa "compareTo".
He intentado utilizar el contexto matemático, pero no parece elegante ... ¿hay una forma correcta?
BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));
y la solución es:
BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));
Esa es otra forma de obtener un número exacto de coma flotante. 1+. –
Tuve que usar ambas ideas aquí para hacerlo bien. Publicará el código correcto. – fodon