Java Math.ceil和Math.floor返回相同的值
我有一张双人票(23.46) 使用Math.ceil和Math.floor方法并将我的double解析为这些方法,我得到返回给我的相同值,即23 我想把它四舍五入到24。。换句话说,如果我有一个双精度的15.01,它仍然应该四舍五入到16。。。我该怎么做?当我跑步时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 {
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