使用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;
答案 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;