Solución de Live @ Sergey pero con división entera.
double value = 23.8764367843;
double rounded = (double) Math.round(value * 100)/100;
System.out.println(value +" rounded is "+ rounded);
impresiones
23.8764367843 rounded is 23.88
EDIT: Como Sergey señala, no debería haber ninguna diferencia entre multipling doble * int * y doble doble y dividiendo doble/int y doble/doble. No puedo encontrar un ejemplo donde el resultado sea diferente. Sin embargo, en x86/x64 y otros sistemas existe una instrucción de código de máquina específica para valores mixtos dobles, que creo que utiliza la JVM.
for (int j = 0; j < 11; j++) {
long start = System.nanoTime();
for (double i = 1; i < 1e6; i *= 1.0000001) {
double rounded = (double) Math.round(i * 100)/100;
}
long time = System.nanoTime() - start;
System.out.printf("double,int operations %,d%n", time);
}
for (int j = 0; j < 11; j++) {
long start = System.nanoTime();
for (double i = 1; i < 1e6; i *= 1.0000001) {
double rounded = (double) Math.round(i * 100.0)/100.0;
}
long time = System.nanoTime() - start;
System.out.printf("double,double operations %,d%n", time);
}
imprime
double,int operations 613,552,212
double,int operations 661,823,569
double,int operations 659,398,960
double,int operations 659,343,506
double,int operations 653,851,816
double,int operations 645,317,212
double,int operations 647,765,219
double,int operations 655,101,137
double,int operations 657,407,715
double,int operations 654,858,858
double,int operations 648,702,279
double,double operations 1,178,561,102
double,double operations 1,187,694,386
double,double operations 1,184,338,024
double,double operations 1,178,556,353
double,double operations 1,176,622,937
double,double operations 1,169,324,313
double,double operations 1,173,162,162
double,double operations 1,169,027,348
double,double operations 1,175,080,353
double,double operations 1,182,830,988
double,double operations 1,185,028,544
si redonda esto, 1.085879335, precisión 2 dígitos que será 1.09 y 1.08 si redondeo hacia abajo. ¿Cómo es que quieres obtener 1.07 de 1.085879335? – fmucar