如何将double舍入到最接近的整数然后转换为float?

时间:2011-11-22 22:54:39

标签: java rounding

我使用java.util.Random生成随机高斯。我需要将此高斯转换为浮点值。然而高斯是一个双,所以我需要一些方法来圆或然后将其转换为浮点数。我需要四舍五入到最近的整数,四舍五入。这是我的问题:如何?

4 个答案:

答案 0 :(得分:54)

float b = (float)Math.ceil(a); 要么 float b = (float)Math.round(a);

取决于您是指“舍入到最接近的整数”(圆形)还是“向上舍入”(ceil)。

小心将double转换为float的精度会降低,但这不应成为问题。

答案 1 :(得分:8)

这是一个简单的例子:

public class One {

    /**
     * @param args
     */
    public static void main(String[] args) {

        double a = 4.56777;
        System.out.println( new Float( Math.round(a)) );

    }

}

结果和输出将是: 5.0
最接近的上限浮动到起始值double a = 4.56777
在这种情况下,建议使用round,因为它接收double值并提供整个long

此致

答案 2 :(得分:3)

答案 3 :(得分:0)

值得的是:

如下表所示,任何给定输入的最接近整数可以使用Math.ceil或Math.floor计算,具体取决于输入与下一个整数之间的距离

+-------+--------+
| input | output |
+-------+--------+
|     1 |      0 |
|     2 |      0 |
|     3 |      5 |
|     4 |      5 |
|     5 |      5 |
|     6 |      5 |
|     7 |      5 |
|     8 |     10 |
|     9 |     10 |
+-------+--------+
private int roundClosest(final int i, final int k) {
    int deic = (i % k);
    if (deic <= (k / 2.0)) {
        return (int) (Math.floor(i / (double) k) * k);
    } else {
        return (int) (Math.ceil(i / (double) k) * k);
    }
}