首先,我想指出的是,我知道这是一个涉及很多的主题,但是经过一个小时的研究,并尝试了其他建议之后,我仍然无法解决这个问题。
我正在通过性能对给定数字时间的0.1范围内的数字执行二进制搜索。但是,我既需要最小/最大目标,也需要我们用(平均值)搜索的数字四舍五入到小数点后一位。
该方法假定性能按升序排序。
public static int binarySearch(Performance[] performances, double time) {
if (performances == null){
return -1;
}
int first = 0;
int last = performances.length - 1;
double targetMax = time + 0.1;
double targetMin = time - 0.1;
targetMax = Math.round((targetMax * 100)) / 100.0;
targetMin = Math.round((targetMin * 100)) / 100.0;
while (first <= last){
int mid = (first + last)/2;
double average = performances[mid].averageTime();
average = Math.round((average * 100)) / 100.0;
if ((targetMax > average) && (targetMin < average) ){
return mid;
}
else if(average < targetMin){
last = mid -1;
}
else {
first = mid + 1;
}
}
return -1;
}
这是奇怪的地方。我完成的舍入似乎对于targetMax和targetMin都可以正常工作,将9.299999999舍入为9.3,但是将平均值从9.3333333333舍入时返回9.33
我真的很为难,我不是对两个变量都做同样的事情吗?
本网站的新功能,因此,请原谅我遗漏的任何内容,请提出问题并加以修改。 :)
最佳答案
您将两者都舍入到小数点后两位-只是9.2999999的舍入为9.30。
在每种情况下,将100
更改为10
,以四舍五入到小数点后一位。