Math.ceil和Math.floor返回相同的值

时间:2011-08-25 09:18:50

标签: java math

我有一个双(23.46)

使用Math.ceil和Math.floor方法并将我的double解析为这些方法,我得到的返回值相同,即23 ...

我希望它被四舍五入到24 ..换句话说,如果我有一个15.01的双倍,它应该仍然四舍五入到16 ......我该怎么做?

5 个答案:

答案 0 :(得分:50)

无法重现:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(Math.ceil(23.46)); // Prints 24
        System.out.println(Math.floor(23.46)); // Prints 23
    }
}

我怀疑要么你没有得到你认为你拥有的输入数据你没有写出你认为的输出数据。 Math.floor / ceil本身工作正常。它们返回相同值的唯一时间是输入已经是整数。你谈论解析你的双重...我的猜测是错误就在那里。请向我们展示一个简短但完整的程序来说明问题。

(可能存在非常大的值的其他场景,其中确切的目标整数不能完全表示为double - 我没有检查 - 但这肯定不是这里的情况。)

答案 1 :(得分:14)

float x = ((float)2346/100);  // You should type cast. Otherwise results 23
Math.ceil(x);                 // So Math.ceil(23) is 23 !!!
                              // Here I type cast to float.
                              // So I get the result 24

答案 2 :(得分:4)

代码

System.out.println(Math.ceil(23.46));
System.out.println(Math.floor(23.46));

给我以下输出:

24.0
23.0

所以它按预期工作。

答案 3 :(得分:3)

当我跑步时

System.out.println(Math.ceil(23.46));
System.out.println(Math.ceil(15.01));

我得到了

24.0
16.0

这不是你想要的吗?

答案 4 :(得分:3)

你如何进行实际调用?我无法使用double对象或基本类型复制结果。

此代码:

    Double d_object = new Double(23.46);
    double d_simple = 23.46;

    System.out.println("Ceiling simple: " + Math.ceil(d_simple));
    System.out.println("Floor simple: " + Math.floor(d_simple));

    System.out.println("Ceiling object: " + Math.ceil(d_object));
    System.out.println("Floor object: " + Math.floor(d_object));

给了我:

Ceiling simple: 24.0
Floor simple: 23.0
Ceiling object: 24.0
Floor object: 23.0