我正在尝试将用户输入四舍五入,但我似乎无法将我的双精度数舍入为整数。基本上,当我输入4.4999时,它不会向上舍入为5。
有什么想法吗?
有什么想法吗?
Math.ceil()
返回的是向上取整后的值。它不能改变作为参数传递进来的变量的值,因为Java是按值传递的。所以你需要这样做:
hours = Math.ceil(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
。ceil
中输入的任何内容都必须是double
而不是int
。因此,你问题中的4.999
应该是一个double
,而不是像4999/1000
一样的整数操作的结果。ceil
之内的任何东西都是double
而不是int
。这两个函数都返回舍入后(或向上取整)的值,但不会改变传递作为参数的变量。
例如使用 hours = Math.ceil(hours);
。
你没有将 Math.ceil(hours)
的结果赋值回 hours
,所以它永远不会被四舍五入。
Math.ciel
返回一个Double
。下面这样做应该可以(在你的hours > 0
块中):
cost += Math.ceil(hours) * hourlyRate;
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: 8
Math.round()
的作用类似于Math.floor(a + 0.5d)
。如果你计算:4.4999 + 0.5
,结果仍然不会超过5
,这就是为什么在使用round时你的实例不会得到5
。 - Tom