Caros,
Andei pesquisando GUJ e Google afora, mas ainda estou com o mesmo problema para fazer um trunc (truncate) um valor decimal (double).
Alguns casos funciona, mas em outro em específico não.
Vai ai as soluções de truncamento por precisão (casas decimais) que usei, mas o resultado foi o mesmo:
public static double trunc( double val, int precision ) {
BigDecimal bd = new BigDecimal(val).setScale(precision,BigDecimal.ROUND_DOWN);
return bd.doubleValue();
}
public static double trunc( double val, int precision ) {
double fator = Math.pow(10,precision);
return ((long)(val * fator)) / fator;
}
E no Unit Test:
public void testTrunc() {
double original = 1234.567890;
double trunc = 0;
trunc = NumericUtil.trunc(original,3);
assertEquals(trunc, 1234.567); // OK
trunc = NumericUtil.trunc(-original,4);
assertEquals(trunc, -1234.5678); // OK
trunc = NumericUtil.trunc(4.31D, 2);
assertEquals(trunc, 4.31); // DIFERENTE
}
Alguém pode dar uma solução definitiva?
Grato