Even though both float and int are 32-bit wide data types, the float has a higher range than the integer primitive value. Since a float is bigger than int, you can convert a float to an int by simply down-casting it e.g. (int) 4.0f will give you integer 4. By the way, you must remember that typecasting just get rid of anything after the decimal point, they don't perform any rounding or flooring operation on the value. So if your float value is 3.999, down casting to an integer will produce 3, not 4. If you need rounding then consider using the Math.round() method, which converts float to its nearest integer by adding +0.5 and then truncating it.
By the way, Math.random() is overloaded for both float and double, so you can use this for converting double to long as well.
Let's see an example of converting a float value to int in Java.
float to int using type casting
If your requirement is to convert a floating point number to an integer by just getting rid of those fractional values after the decimal point then down-casting is the best way to do it. It's simple, efficient and elegant,Here is an example of casting float to int in Java:
You can see that for both 3.14 and 3.99 you got just 3 because type casting doesn't do any rounding before truncating the value after the decimal point.
Remember, Math.round() is overloaded to accept both float and double, the version which accepts float return int and other one return long.
int value = (int) 3.14f; // 3 int score = (int) 3.99f; // 3
You can see that for both 3.14 and 3.99 you got just 3 because type casting doesn't do any rounding before truncating the value after the decimal point.
float to int using Math.round()
This is the right way to convert float to int if you are interested in rounding before conversion. Math.round() converts a floating-point number to the nearest integer by first adding 0.5 and then truncating value after the decimal point.int a = Math.round(3.14f); // 3 int b = Math.round(3.99f); // 4 int c = Math.round(3.5f); // 4
Remember, Math.round() is overloaded to accept both float and double, the version which accepts float return int and other one return long.
Since floating point number is by default double, you make sure to put suffix "f" with values, otherwise, you will end up calling Math.round(double) method, which require further casting from long to int as shown below:
Here is a summary of all three ways to convert a float to an int value in Java:
// casting required because Math.round(double) returns long int a = (int) Math.round(3.14);
Here is a summary of all three ways to convert a float to an int value in Java:
Java Program to convert float to int
Let's see a complete, running Java program to test whatever you have learned so far. In the following example, I have combined both casting and rounding to convert float to an integer in Java. This converts some floating-point numbers to int.You can further enhance this program to accept a floating-point number from the user and then convert it to an integer. If you are new and don't know how to read user input then check out this tutorial.
1) Even though both int and float are the 32-bit data type, but the float has a higher range than int.
2) You can downcast float to int to get rid of decimal values e.g. casting 3.2 will give you 3.
3) Typecasting doesn't perform any rounding, so casting 9.999 will give you 9 and not 10.
4) If you want to round before conversion then use Math.round(float), it will give you the nearest integer.
4) Remember, Math.round() is overloaded, one accept the double and another float. Since floating-point number is by default double, make sure you put "f" suffix while passing constant values to Math.round() method.
That's all about how to convert float to int in Java. Even though you can simply convert a float primitive value to int primitive by downcasting, but you must remember that type casting doesn't do rounding. It just throws away anything after the decimal point.
/** * Java Program to convert a float value to integer. * * @author WINDOWS * */ public class floatToInteger{ public static void main(String args[]) { // converting a float to int by casting System.out.println("converting float to int using downcasting"); int value = (int) 3.14f; // 3 int score = (int) 3.99f; // 3 System.out.printf("float : %f, int : %d %n", 3.14f, value); System.out.printf("float : %f, int : %d %n", 3.99f, score); // converting float to integer value by rounding System.out.println("converting float to int using rounding"); int a = Math.round(3.14f); // 3 int b = Math.round(3.99f); // 4 int c = Math.round(3.5f); // 4 System.out.printf("float : %f, int : %d %n", 3.14f, a); System.out.printf("float : %f, int : %d %n", 3.99f, b); System.out.printf("float : %f, int : %d %n", 3.5f, c); } } Output: converting float to int using downcasting float : 3.140000, int : 3 float : 3.990000, int : 3 converting float to int using rounding float : 3.140000, int : 3 float : 3.990000, int : 4 float : 3.500000, int : 4
Important points to remember
Here are some important points to note while converting float to int variable in Java:1) Even though both int and float are the 32-bit data type, but the float has a higher range than int.
2) You can downcast float to int to get rid of decimal values e.g. casting 3.2 will give you 3.
3) Typecasting doesn't perform any rounding, so casting 9.999 will give you 9 and not 10.
4) If you want to round before conversion then use Math.round(float), it will give you the nearest integer.
4) Remember, Math.round() is overloaded, one accept the double and another float. Since floating-point number is by default double, make sure you put "f" suffix while passing constant values to Math.round() method.
That's all about how to convert float to int in Java. Even though you can simply convert a float primitive value to int primitive by downcasting, but you must remember that type casting doesn't do rounding. It just throws away anything after the decimal point.
If you want to round the float to the nearest integer then please use Math.round() method, which accepts a float and returns the nearest integer.
Since this method is overloaded, make sure you suffix "f" to your values to ensure that they are considered float and double, otherwise, the compiler will call Math.round(double) method, which will round but returns long, and you need to further cast into int to avoid the compiler error.
Related Tutorials
If you like this tutorial and wants to learn more about how to convert one data type into another, then you can also check out the following Java programming tutorials:
Next time, if you have to convert a float value to an int or a long value in Java then you can use these tips.
Related Tutorials
If you like this tutorial and wants to learn more about how to convert one data type into another, then you can also check out the following Java programming tutorials:
- How to convert String to Double in Java? (example)
- How to convert from Integer to String in Java? (tutorial)
- How to convert String to Date in a thread-safe manner? (example)
- How to convert String to int in Java? (example)
- How to convert byte array to String in Java? (program)
- How to convert double to Long in Java? (program)
- How to convert a List to array in Java? (tutorial)
- How to convert Decimal to Binary in Java? (example)
- How to convert char to String in Java? (tutorial)
- How to parse String to long in Java? (answer)
- How to convert java.sql.Date to java.util.Date in Java? (article)
- How to convert an array to List and Set in Java? (answer)
- How to convert ByteBuffer to String in Java? (program)
- How to convert Enum to String in Java? (example)
- How to convert float to String in Java? (example)
Next time, if you have to convert a float value to an int or a long value in Java then you can use these tips.
FixTypo:: Math.random()
ReplyDeleteYou likely meant there Math.round()
thanks, it was easy to understand.
ReplyDelete