使用double时限制Java中的十进制数字

使用double时限制Java中的十进制数字,java,double,Java,Double,我有几个变量,都是int,我用它们做这个操作: percentage = ((double)100) - (((double)100)/(((double)64)*((double)dist.size()-1))*((double)bestDist)); 强迫他们加倍,因为我想计算一个百分比。问题是(当然)我得到的结果是65.888416666666,我想得到一个只有两个十进制数字的数字,我不介意近似,我也可以删掉所有数字,所以我得到的是65.88,而不是65.89。我怎样才能做到这一点呢?你

我有几个变量,都是int,我用它们做这个操作:

percentage = ((double)100) - (((double)100)/(((double)64)*((double)dist.size()-1))*((double)bestDist));

强迫他们加倍,因为我想计算一个百分比。问题是(当然)我得到的结果是65.888416666666,我想得到一个只有两个十进制数字的数字,我不介意近似,我也可以删掉所有数字,所以我得到的是65.88,而不是65.89。我怎样才能做到这一点呢?

你可以用round

double roundedPercentage = (double) Math.round(percentage * 100) / 100;

如果这是用于显示结果,则可以使用如下格式设置程序:

String formatted = String.format("%.2f", 65.88888);

此处,.2表示小数点后显示2位数字。要获得更多选项,请尝试BigDecimal

尽管@CHERUKURI建议的是我自己真正使用的,但当它是MAX\u DOUBLE时,会产生不准确的结果

Math.ceil(percentage) + Math.ceil((Math.ceil(percentage) - percentage) * 100)/100.0;
它有太多的方法调用,但是,它将为您提供它应该提供的

如果这个数字很小,那么下面就足够了:

(double) Math.round(percentage * 100) / 100;

是否确实要将
百分比的值更改为仅保留小数点后的两位数字,还是只显示小数点后的前两位数字?可能重复