舍入双精度最有效的方法是什么?

时间:2016-12-05 10:05:55

标签: java compare double

我希望绕一个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)做一些非常有效的事情并分析很长时间,但我不是专家。

非常感谢,

艾利奥特

0 个答案:

没有答案