Java计算方法返回1.0而不是0.5?做什么?

时间:2014-04-08 04:38:15

标签: java arrays formula

使用Max 70和Min 59测试此代码时,它返回1.0而不是0.5。我的公式错了吗?第二个if语句也适用于以下方向:( public static double hdd(int max,int min),返回一天的HDD。如果是max 或者min是-999(缺失)返回0.0。如果max< min return 0.0。)所以idk与问题相关。

/**
 * Calculate heating degree day.
 * @param max The highest temperature for a given day.
 * @param min The lowest temperature for a given day.
 * @return heating degree day data for this day.
 */
public static double hdd(int max, int min)
{
    double average = (max + min) / 2;
    double hdd = 0.0;

    if (average < 65.0)
    {
        hdd = 65.0 - average;
    }
    else
    {
        hdd = 0.0;
    }

    if(max == -999 || min == -999)
    {
        hdd = 0.0;
    }
    else if (max < min)
    {
       hdd = 0.0;   
    }


    return hdd;

2 个答案:

答案 0 :(得分:2)

您的问题是(max + min) / 2是一个整数除法,这意味着它会被截断为下面的整数。在这种情况下,(70 + 59) / 2会提供64,然后您将其存储在double中。但这不会恢复丢失的0.5

在分割之前,您需要将分子或分母转换为double。用2.0代替2是实现这一目标的一种方法。

答案 1 :(得分:1)

当您将整数除以另一个整数时,结果也将是整数。所以它不会有一个小部分。

您可以通过更改此行

来解决此问题

double average = (max + min) / 2;

到这个

double average = (max + min) / 2.0;