java - 圆形 float 到更接近(或最接近的)

标签 java numbers rounding

我有一些“引用” float (例如 1.5、3 和 7.1),有什么方法可以让其他一些“随机” float 四舍五入到最接近的一个? (我的意思是如果有像round这样的东西,可以取引用值进行四舍五入)

或者有什么方法可以让一些数字从 2 舍入到更接近的 1(当然手动决定除外)?

我在数学中没有找到任何方法,也许是一些外部库? 或者为此编写自己的方法是更好的主意(获取括号中每个值的绝对差并获取最小的值)? 我知道这很平庸,但它可能很有用..

感谢您的回复

编辑- 例如。: 如果我想

  • “回合”1,得到 1.5
  • 第 5 轮,获得 3
  • 第 8 轮,获得 7.7
  • 第 1.7 轮,获得 1.5

等等。

最佳答案

更优化的答案:

“for i”方式,更易于阅读

private static double roundForI(double toRound, double[] numbers) {
    int minIndex = 0;
    double minDiff = Double.MAX_VALUE;
    double diff;
    for (int i=0; i<numbers.length; ++i) {
        diff = Math.abs(numbers[i]-toRound);
        if (diff < minDiff) {
            minDiff = diff;
            minIndex = i;
        }
    }
    return numbers[minIndex];
}

更短的一个,“对于每个”方式

private static double roundForEach(double toRound, double[] numbers) {
    double diff, roundValue = 0, minDiff = Double.MAX_VALUE;
    for (double dob : numbers) {
        if ((diff = Math.abs(dob-toRound)) < minDiff) {
            minDiff = diff;
            roundValue = dob;
        }
    }
    return roundValue;
}

“Java8 Golf Style”方式,它并不比上面的2种方式更好。

private static double roundLambda(double n, double[] a) {
    double[] r = {0}, d = {Double.MAX_VALUE};
    Arrays.stream(a).filter((i)->Math.abs(i-n)<d[0]).forEach(i->{d[0]=Math.abs(i-n);r[0]=i;});
    return r[0];
}

关于java - 圆形 float 到更接近(或最接近的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873469/

相关文章:

java - setOnItemSelectedListener 上下文

java - JPA - 使用 EclipseLink 保持单向一对多关系失败

c - 从文本文件中读取数字并将其用作输入

java - java中如何给单词赋值?

c# - 为什么将 DateTime 格式化为字符串会截断而不是舍入毫秒?

java - BigDecimal 使用 ROUND_HALF_UP 舍入不好

java - "Display over other apps"

java - setOnClickListener 错误

R:将增量编号分配给包含相同标签的行

javascript - 限制 var 乘法总数中的位数