Distintos senhores,
existe uma maneira mais elegante de truncar um double? Veja bem, quero truncar 2 casas decimais, e não arredondar. Exemplo:
1 / 3 = 0.[telefone removido]…
truncando esse valor com 2 cadas decimais ficaria: 0.33
Encontrei duas “soluções” na web, mas as duas têm erro.
Primeira:
double d = 12.345;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(d));
Essa solução possui um erro, tentem colocar o valor de d para d = (4d/3d)*2;, eu esperava 2.66, mas ele me retorna 2.67.
A segunda solução que encontrei é pior, não funciona bem quando o número passado termina com zero:
public static double truncate(double x)
{
long y=(long)(x*100);
return (double)y/100;
}
Como workaround fiz a seguinte gambiarra (mas tem funcionado muito bem):
public static double truncate(double d, int p) {
String str = Double.toString(d);
str = str.substring(0, str.indexOf(".")+p+1);
return Double.parseDouble(str);
}
Alguém sugere algo melhor? Ou seja, sem utilizar Strings no meio do caminho?
