我需要在一个模糊的工作中保持粒度,所以我制作了一个作为参数接收的函数:
- 粒度(0 和 1 之间的双精度数,不包括 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)
问候
PS对不起,我在这个问题上犯了任何错误,这是我的第一个问题