Math.round和Math.ceil无法正常工作

8
我正在尝试将用户输入四舍五入,但我似乎无法将我的双精度数舍入为整数。基本上,当我输入4.4999时,它不会向上舍入为5。
有什么想法吗?

y := f(x) ...f 不会改变 x 的值 ... - Jens Piegsa
Math.round()的作用类似于Math.floor(a + 0.5d)。如果你计算:4.4999 + 0.5,结果仍然不会超过5,这就是为什么在使用round时你的实例不会得到5 - Tom
6个回答

11

Math.ceil()返回的是向上取整后的值。它不能改变作为参数传递进来的变量的值,因为Java是按值传递的。所以你需要这样做:

hours = Math.ceil(hours);

1
(int)Math.ceil(3/2.0) 将得到答案 2(int)Math.ceil(3/2) 将得到答案 1为了获得浮点值,您需要将其中一个参数强制转换(或添加 .0)。 - Shyam Sunder

9
实际解决方案是在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

4

这两个函数都返回舍入后(或向上取整)的值,但不会改变传递作为参数的变量。

例如使用 hours = Math.ceil(hours);


2

你没有将 Math.ceil(hours) 的结果赋值回 hours,所以它永远不会被四舍五入。


2

Math.ciel返回一个Double。下面这样做应该可以(在你的hours > 0块中):

cost += Math.ceil(hours) * hourlyRate;

1
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


从审核队列中:我可以请求您在源代码周围添加一些上下文吗?仅有代码的答案很难理解。如果您能在帖子中添加更多信息,这将有助于提问者和未来的读者。 - RBT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接