我需要将粒度保持在模糊作业中,因此我创建了一个接收参数的函数:
>粒度(0到1,0之间的双倍,0不包括在内)
>必要时要转换的值(它是大于0的双倍)
并返回具有正确粒度的新值.
这是我的功能:
public static double preserveGranularity(double granul, double value){
double integerValue= (double)(int)value;
if(granul == 1)
return integerValue;
double decimal = value - integerValue;
long factor = Math.round(decimal/granul);
return integerValue + granul*factor;
}
例子:
> preserveGranularity(0.25,7.7)应该返回7.75
> preserveGranularity(0.01,0.009)应返回0.01
它适用于大多数值,但并不适用于所有值(例如:preserveGranularity(0.2,0.57)= 0.6000000000000001,它应该返回0.6)
问候
附:对不起我在这个问题上犯的任何错误,这是我在这里的第一个错误