Live @ Sergey的解决方案,但与整数除法。
double value = 23.8764367843;
double rounded = (double) Math.round(value * 100)/100;
System.out.println(value +" rounded is "+ rounded);
打印
23.8764367843 rounded is 23.88
编辑:正如谢尔盖指出,应该有复接没什么区别双* int和double *双和双分频/ int和double /双。我找不到结果不同的例子。但是,在x86/x64和其他系统上,我认为JVM使用混合double,int值的特定机器代码指令。
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);
}
打印
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
如果这一轮了,1.085879335,2位精度将是如果下降,则为1.09和1.08。你为什么想从1.085879335中获得1.07? – fmucar 2011-01-25 17:38:35