You are doing 157/32 which is dividing two integers with each other, which always result in a rounded down integer. Therefore the (int) Math.ceil(...) isn't doing anything. There are three possible solutions to achieve what you want. I recommend using either option 1 or option 2. Please do NOT use option 0.

Option 0

Convert a and b to a double, and you can use the division and Math.ceil as you wanted it to work. However I strongly discourage the use of this approach, because double division can be imprecise. To read more about imprecision of doubles see this question.

int n = (int) Math.ceil((double) a / b));

Option 1

int n = a / b + ((a % b == 0) ? 0 : 1); 

You do a / b with always floor if a and b are both integers. Then you have an inline if-statement which checks whether or not you should ceil instead of floor. So +1 or +0, if there is a remainder with the division you need +1. a % b == 0 checks for the remainder.

Option 2

This option is very short, but maybe for some less intuitive. I think this less intuitive approach would be faster than the double division and comparison approach:
Please note that this doesn't work for b < 0.

int n = (a + b - 1) / b;

To reduce the chance of overflow you could use the following. However please note that it doesn't work for a = 0 and b < 1.

int n = (a - 1) / b + 1;

Explanation behind the "less intuitive approach"

Since dividing two integers in Java (and most other programming languages) will always floor the result. So:

int a, b;
int result = a/b (is the same as floor(a/b) )

But we don't want floor(a/b), but ceil(a/b), and using the definitions and plots from Wikipedia:

With these plots of the floor and ceil functions, you can see the relationship.

You can see that floor(x) <= ceil(x). We need floor(x + s) = ceil(x). So we need to find s. If we take 1/2 <= s < 1 it will be just right (try some numbers and you will see it does, I find it hard myself to prove this). And 1/2 <= (b-1) / b < 1, so

ceil(a/b) = floor(a/b + s)
          = floor(a/b + (b-1)/b)
          = floor( (a+b-1)/b) )

This is not a real proof, but I hope you're satisfied with it. If someone can explain it better I would appreciate it too. Maybe ask it on MathOverflow.

Answer from martijnn2008 on Stack Overflow
๐ŸŒ
GeeksforGeeks
geeksforgeeks.org โ€บ java โ€บ java-ceil-method-examples
Java ceil() method with Examples - GeeksforGeeks
April 7, 2018 - Example 1: This program demonstrates how the Math.ceil() method works with different types of double values in Java. ... import java.lang.Math; class GFG { public static void main(String args[]) { double a = 4.3; double b = 1.0 / 0; double c = 0.0; double d = -0.0; double e = -0.12; System.out.println(Math.ceil(a)); System.out.println(Math.ceil(b)); System.out.println(Math.ceil(c)); System.out.println(Math.ceil(d)); System.out.println(Math.ceil(e)); } }
๐ŸŒ
W3Schools
w3schools.com โ€บ java โ€บ ref_math_ceil.asp
Java Math ceil() Method
Java Examples Java Videos Java Compiler Java Exercises Java Quiz Java Code Challenges Java Server Java Syllabus Java Study Plan Java Interview Q&A Java Certificate ... System.out.println(Math.ceil(0.60)); System.out.println(Math.ceil(0.40)); System.out.println(Math.ceil(5)); System.out.println(Math.ceil(5.1)); System.out.println(Math.ceil(-5.1)); System.out.println(Math.ceil(-5.9));
๐ŸŒ
Scaler
scaler.com โ€บ home โ€บ topics โ€บ math.ceil() in java
Math.ceil() in Java - Scaler Topics
May 5, 2024 - The ceil function returns a double value, which is equal to the nearest Mathematical integer greater than or equal to the passed parameter.
๐ŸŒ
Codecademy
codecademy.com โ€บ docs โ€บ java โ€บ math methods โ€บ .ceil()
Java | Math Methods | .ceil() | Codecademy
December 12, 2022 - The Math.ceil() method returns the double value that is a mathematical integer and is greater than or equal to the original value. ... Looking for an introduction to the theory behind programming?
Top answer
1 of 15
246

You are doing 157/32 which is dividing two integers with each other, which always result in a rounded down integer. Therefore the (int) Math.ceil(...) isn't doing anything. There are three possible solutions to achieve what you want. I recommend using either option 1 or option 2. Please do NOT use option 0.

Option 0

Convert a and b to a double, and you can use the division and Math.ceil as you wanted it to work. However I strongly discourage the use of this approach, because double division can be imprecise. To read more about imprecision of doubles see this question.

int n = (int) Math.ceil((double) a / b));

Option 1

int n = a / b + ((a % b == 0) ? 0 : 1); 

You do a / b with always floor if a and b are both integers. Then you have an inline if-statement which checks whether or not you should ceil instead of floor. So +1 or +0, if there is a remainder with the division you need +1. a % b == 0 checks for the remainder.

Option 2

This option is very short, but maybe for some less intuitive. I think this less intuitive approach would be faster than the double division and comparison approach:
Please note that this doesn't work for b < 0.

int n = (a + b - 1) / b;

To reduce the chance of overflow you could use the following. However please note that it doesn't work for a = 0 and b < 1.

int n = (a - 1) / b + 1;

Explanation behind the "less intuitive approach"

Since dividing two integers in Java (and most other programming languages) will always floor the result. So:

int a, b;
int result = a/b (is the same as floor(a/b) )

But we don't want floor(a/b), but ceil(a/b), and using the definitions and plots from Wikipedia:

With these plots of the floor and ceil functions, you can see the relationship.

You can see that floor(x) <= ceil(x). We need floor(x + s) = ceil(x). So we need to find s. If we take 1/2 <= s < 1 it will be just right (try some numbers and you will see it does, I find it hard myself to prove this). And 1/2 <= (b-1) / b < 1, so

ceil(a/b) = floor(a/b + s)
          = floor(a/b + (b-1)/b)
          = floor( (a+b-1)/b) )

This is not a real proof, but I hope you're satisfied with it. If someone can explain it better I would appreciate it too. Maybe ask it on MathOverflow.

2 of 15
62

157/32 is int/int, which results in an int.

Try using the double literal - 157/32d, which is int/double, which results in a double.

๐ŸŒ
How to do in Java
howtodoinjava.com โ€บ home โ€บ java math.ceil() vs. math.floor() vs. math.round()
Java Math.ceil() vs. Math.floor() vs. Math.round()
September 6, 2023 - The Math.ceil() method is primarily used when we want to ensure that a number is rounded up to the next highest integer, regardless of its decimal part. In the following example, Math.ceil(4.3) rounds up 4.3 to 5.0, ensuring the result is not ...
๐ŸŒ
Tutorialspoint
tutorialspoint.com โ€บ java โ€บ lang โ€บ math_ceil.htm
Java - Math ceil(double) Method
package com.tutorialspoint; public class MathDemo { public static void main(String[] args) { // get a double number double x = 10.7; // print the ceil of the number System.out.println("Math.ceil(" + x + ")=" + Math.ceil(x)); } }
Find elsewhere
๐ŸŒ
Javatpoint
javatpoint.com โ€บ java-math-ceil-method
Java Math.ceil() method with Examples - Javatpoint
The java.lang.Math.ceil () is used to find the smallest integer value that is greater than or equal to the argument or mathematical integer ยท Java method The java.lang. return the unbiased exponent used in the representation of double or float. Syntax public static int getExponent(float x) ...
๐ŸŒ
CodeAhoy
codeahoy.com โ€บ java โ€บ Math-Ceil-method-JI_15
Java Math.ceil() Method with Examples | CodeAhoy
October 12, 2019 - We use it to find the ceiling value of a number. This function returns the largest integer greater than or equal to the argument provided. In other words, it returns the next largest integer value of the specified number. For example, if you pass it 3.4, it will return 4.
๐ŸŒ
Vultr Docs
docs.vultr.com โ€บ java โ€บ standard-library โ€บ java โ€บ lang โ€บ Math โ€บ ceil
Java Math ceil() - Round Up Value | Vultr Docs
September 27, 2024 - Use Math.ceil() to round the number to the nearest integer. ... This code rounds the value 3.14 up to 4.0.
๐ŸŒ
Educative
educative.io โ€บ answers โ€บ what-is-mathceil-in-java
What is Math.ceil() in Java?
The ceil() function returns the nearest smallest double value that is greater than or equal to a number. Figure 1 shows the mathematical representation of the ceil() function.
๐ŸŒ
CodeGym
codegym.cc โ€บ java blog โ€บ java math โ€บ java math.ceil() method
Java Math.ceil() method
October 11, 2023 - โ€œA ceil function converts a decimal number to the immediate largest integer.โ€ If the number passed is already a whole number or an integer, then the same number is the ceiling value.
๐ŸŒ
Medium
medium.com โ€บ @AlexanderObregon โ€บ rounding-numbers-with-math-round-math-floor-and-math-ceil-in-java-d201bbeb85e2
Javaโ€™s Math Rounding Methods Explained | Medium
March 7, 2025 - In a ride-sharing app, for example, if a trip covers 3.2 miles, itโ€™s fairer to charge for 4 miles rather than 3, since the driver still had to complete most of the fourth mile. Memory allocation is another case where rounding up is necessary. If a program needs 4.1 MB to run properly, rounding down to 4 MB wouldnโ€™t be enough. Using Math.ceil() makes sure it gets 5 MB, avoiding unexpected failures due to insufficient memory.
๐ŸŒ
Tutorial Gateway
tutorialgateway.org โ€บ java-ceil-function
Java ceil Function
March 25, 2025 - The Math.ceil Function finds the smallest integer value greater than or equal to the numeric values. We will find positive and negative ceiling values in this program and display the output.
๐ŸŒ
javaspring
javaspring.net โ€บ blog โ€บ ceil-java
Understanding and Using `Math.ceil()` in Java โ€” javaspring.net
If x = 3.2, Math.ceil(x) will return 4.0 because 4 is the smallest integer greater than 3.2.
๐ŸŒ
BeginnersBook
beginnersbook.com โ€บ 2022 โ€บ 10 โ€บ java-math-ceil-method
Java Math.ceil() Method
public class JavaExample { public static void main(String[] args) { double n1 = 5.0/0; //positive infinity double n2 = -5.0/0; //negative infinity System.out.println(Math.ceil(n1)); System.out.println(Math.ceil(n2)); } }
๐ŸŒ
PREP INSTA
prepinsta.com โ€บ home โ€บ java tutorial โ€บ java math ceil() method
Java Math ceil() Method
May 26, 2023 - The value of Math.ceil(x) is exactly the value of -Math.floor(-x). ... Parameters : a - a value. Throws Exception : It does throws any exceptions and error. Return Value : The smallest (closest to negative infinity) floating-point value that is greater than or equal to the argument and is equal to a mathematical integer. ... class Main{ public static void main(String args[]) { double a = 6.3; double b = 5.0 / 0; double c = 0.0; double d = -0.0; double e = -0.15; System.out.println(Math.ceil(a)); // Input Infinity, Output Infinity System.out.println(Math.ceil(b)); // Input Positive Zero, Output Positive Zero System.out.println(Math.ceil(c)); // Input Negative Zero, Output Negative Zero System.out.println(Math.ceil(d)); // Input less than zero but greater than -1.0 // Output Negative zero System.out.println(Math.ceil(e)); } }