首先,我想指出的是,我知道这是一个涉及很多的主题,但是经过一个小时的研究,并尝试了其他建议之后,我仍然无法解决这个问题。

我正在通过性能对给定数字时间的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,以四舍五入到小数点后一位。

09-25 22:02