Boa Tarde,
Ontem precisei truncar um valor double e passei uma tarde toda pesquisando e quebrando a cabeça. Acredito ter encontrado uma solução muito simples que vou deixar aqui para o caso de alguém precisar um dia.
Só uma coisa a acrescentar é que quando precisar de precisão é melhor utilizar a classe BigDecimal do que o double. Os tipos primitivos não são tão rigorosos na parte de precisão (carece de fontes hehehe).
Até mais.
Links sobre os métodos de arredondamento:
http://docs.oracle.com/javase/1.5.0/docs/api/java/math/RoundingMode.html#HALF_UP
http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#ROUND_DOWN
import java.math.BigDecimal;
/*
* O pulo do gato é saber que "truncar" é arrendondar para baixo, então usei o método de arredondamento BigDecimal.ROUND_DOWN.
*/
public class Truncar {
public double truncate(Double valor, int precisao) {
BigDecimal bd = BigDecimal.valueOf(valor);
bd = bd.setScale(precisao, BigDecimal.ROUND_DOWN);
return bd.doubleValue();
}
public static void main(String[] args) {
Truncar t = new Truncar();
double d = 12.53346867565d;
System.out.println(d);
System.out.println(t.truncate(d, 4));
}
}
