Java Math.round和Math.ceil不工作
我试图对用户输入进行四舍五入,但我似乎可以将我的double-to-round设置为int。基本上,当我输入4.4999时,它不会四舍五入到5Java Math.round和Math.ceil不工作,java,Java,我试图对用户输入进行四舍五入,但我似乎可以将我的double-to-round设置为int。基本上,当我输入4.4999时,它不会四舍五入到5 有什么想法吗?Math.ciel返回一个Double。类似的方法应该可以工作(在hours>0块内): 这两个函数都返回四舍五入(或ceiled)值,但不更改作为参数传递的变量 使用例如:小时=数学单元(小时)Math.ceil()返回Celed值。它不能更改作为参数的变量的值,因为Java按值传递参数。所以你需要这样做 hours = Math.cei
有什么想法吗?
Math.ciel
返回一个Double
。类似的方法应该可以工作(在hours>0
块内):
这两个函数都返回四舍五入(或ceiled)值,但不更改作为参数传递的变量 使用例如:小时=数学单元(小时)
Math.ceil()
返回Celed值。它不能更改作为参数的变量的值,因为Java按值传递参数。所以你需要这样做
hours = Math.ceil(hours);
您没有将
Math.ceil(hours)
的结果分配回hours
,因此它永远不会取整。实际的解决方案是在ceil
方法中使用double
Math.ceil(7*50/100)
将返回3.0
,即使7*50/100
产生的实际值是3.5
。这是因为由于一切都是int
,因此350/100
本身的结果将是3
但是,如果您给出Math.ceil(7*50/100D)
,结果将是4.0
因此,您的问题中的4.999
应该是一个double
,而不是像4999/1000这样的整数运算的结果
只要确保ceil
中给出的内容是double
而不是int
int a = 15
int b = 2;
int x = (int) Math.ceil( a / b );
int y = (int) Math.ceil( (double) a / (double) b );
结果:
x:7
y:8y:=f(x)。。。f不会“改变”x…Math.round()
的工作原理类似于Math.floor(a+0.5d)
。如果您计算:4.4999+0.5
这不会给您带来超过5
的结果,这就是为什么在您的实例中,您不会得到带有round的5
。从审阅队列:我可以请求您在源代码周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的帖子中添加更多信息,这将对提问者和未来的读者都有帮助。(int)Math.ceil(3/2.0)将给出答案2(int)Math.ceil(3/2)将给出答案1为了得到浮点值,你需要对其中一个参数进行强制转换(或添加.0)
int a = 15
int b = 2;
int x = (int) Math.ceil( a / b );
int y = (int) Math.ceil( (double) a / (double) b );