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

Java Math.ceil和Math.floor返回相同的值,java,math,Java,Math,我有一张双人票(23.46) 使用Math.ceil和Math.floor方法并将我的double解析为这些方法,我得到返回给我的相同值,即23 我想把它四舍五入到24。。换句话说,如果我有一个双精度的15.01,它仍然应该四舍五入到16。。。我该怎么做?当我跑步时 System.out.println(Math.ceil(23.46)); System.out.println(Math.ceil(15.01)); 我明白了 这不是你想要的吗?无法复制: public class Test {

我有一张双人票(23.46)

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

我想把它四舍五入到24。。换句话说,如果我有一个双精度的15.01,它仍然应该四舍五入到16。。。我该怎么做?

当我跑步时

System.out.println(Math.ceil(23.46));
System.out.println(Math.ceil(15.01));
我明白了

这不是你想要的吗?

无法复制:

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
    }
}

我怀疑要么你没有你认为你拥有的输入数据,要么你没有写出你认为你拥有的输出数据<代码>数学。地板/
ceil
本身工作正常。当输入已经是整数时,它们将返回相同的值。你说要分析你的双重身份。。。我猜错误就在那里。请给我们一个简短但完整的程序来演示这个问题

(在非常大的值周围可能还有其他情况,精确的目标整数不能精确地表示为一个
double
-我没有检查-但这里肯定不是这样。)

代码

System.out.println(Math.ceil(23.46));
System.out.println(Math.floor(23.46));
提供以下输出:

24.0
23.0

因此,它按预期工作。

如何进行实际调用?我无法使用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

“只有当输入已经是整数时,它们才会返回相同的值”这是我的问题。我犯了一个愚蠢的错误,谢谢你的帮助。请发布可复制的代码,显示你是如何得到Math.ceil(23.46)=23?与这个问题有点相关,如果double失去了精度,ceil和floor可以打印相同的值,例如System.out.println(“ceil:+Math.ceil((10000000000000000L-1)/2.0));System.out.println(“地板:+数学地板((10000000000000000l-1)/2.0));两者都将为您带来5.0E17。
Ceiling simple: 24.0
Floor simple: 23.0
Ceiling object: 24.0
Floor object: 23.0
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