我希望绕一个double(主要用于hashcode方法)。这对我的项目来说至关重要,即使它是一个简单的方法。目前我的方法如下:
private final static int _STEP = 5;
private final static double _RANGE = Math.pow(10, -_STEP + 1);
private final static double _GAP = Math.pow(10, _STEP - 1);/**
* @param d
* @return the current d with a static constant number of
* decimals
*/
public strictfp static double roundDoubles(double d) {
double tamp = d * _GAP;
tamp = Math.round(tamp);
tamp = tamp * _RANGE;
if (tamp == -0.0) {
return 0.0;
}
return tamp;
}
此方法允许在1/(10^5)
处舍入双精度。我真的不关心精度是十进制的事实。你可以用二进制对它进行舍入,这不是问题(例如,1/(2^13)
的舍入几乎相同)。
我想我们可以用方法Double.doubleToLongBits(value)
做一些非常有效的事情并分析很长时间,但我不是专家。
非常感谢,
艾利奥特