Of course! Converting a String to a float in Java is a common task. The primary and recommended way to do this is by using the Float.parseFloat() static method.

Here’s a comprehensive guide covering the best practices, alternatives, and important edge cases.
The Recommended Method: Float.parseFloat()
This is the simplest and most direct way to convert a String to a primitive float.
How it Works
The Float.parseFloat(String s) method attempts to parse the string argument as a signed decimal float. It returns a primitive float value.
Example
public class StringToFloatExample {
public static void main(String[] args) {
String strNumber = "123.45";
String strNegative = "-67.89";
String strScientific = "1.23e4"; // 1.23 * 10^4
// Convert String to float
float num1 = Float.parseFloat(strNumber);
float num2 = Float.parseFloat(strNegative);
float num3 = Float.parseFloat(strScientific);
System.out.println("String: '" + strNumber + "' -> float: " + num1);
System.out.println("String: '" + strNegative + "' -> float: " + num2);
System.out.println("String: '" + strScientific + "' -> float: " + num3);
}
}
Output:

String: '123.45' -> float: 123.45
String: '-67.89' -> float: -67.89
String: '1.23e4' -> float: 12300.0
The Float.valueOf() Method
This method is very similar, but it returns a Float object (a wrapper class) instead of a primitive float. Java will automatically "unbox" this into a primitive float in most contexts, but it's good to know the difference.
How it Works
Float.valueOf(String s) parses the string and returns a Float object.
Example
public class ValueOfExample {
public static void main(String[] args) {
String strNumber = "98.76";
// Convert String to Float object
Float floatObject = Float.valueOf(strNumber);
// The object can be used where a primitive is needed (auto-unboxing)
float primitiveFloat = floatObject;
System.out.println("Float object: " + floatObject);
System.out.println("Primitive float: " + primitiveFloat);
}
}
Output:
Float object: 98.76
Primitive float: 98.76
Handling Errors (Crucial!)
What happens if the String does not contain a valid number? Both parseFloat() and valueOf() will throw a NumberFormatException. You must handle this exception in a real-world application.

Example with Exception Handling
public class ExceptionHandlingExample {
public static void main(String[] args) {
String validNumber = "3.14";
String invalidNumber = "hello world";
String nullString = null;
System.out.println("Converting valid string: '" + validNumber + "'");
try {
float f = Float.parseFloat(validNumber);
System.out.println("Success! Converted to: " + f);
} catch (NumberFormatException e) {
System.out.println("Error: Could not convert the string.");
}
System.out.println("\nConverting invalid string: '" + invalidNumber + "'");
try {
float f = Float.parseFloat(invalidNumber);
System.out.println("Success! Converted to: " + f);
} catch (NumberFormatException e) {
// This block will execute
System.out.println("Error: " + e.getMessage());
}
System.out.println("\nConverting null string:");
try {
// This will throw a NullPointerException, not NumberFormatException
float f = Float.parseFloat(nullString);
System.out.println("Success! Converted to: " + f);
} catch (NumberFormatException e) {
System.out.println("Error: Could not convert the string.");
} catch (NullPointerException e) {
// This block will execute
System.out.println("Error: Cannot parse a null string.");
}
}
}
Output:
Converting valid string: '3.14'
Success! Converted to: 3.14
Converting invalid string: 'hello world'
Error: For input string: "hello world"
Converting null string:
Error: Cannot parse a null string.
Important Considerations and Edge Cases
a) Locale-Specific Formatting
In some countries, a comma () is used as the decimal separator instead of a period (). Float.parseFloat() only recognizes the period as a decimal separator and will fail with a comma.
Solution: Use NumberFormat for locale-aware parsing.
import java.text.NumberFormat;
import java.util.Locale;
public class LocaleExample {
public static void main(String[] args) {
// A string formatted for a German locale (uses comma as decimal separator)
String germanNumber = "123,45";
// This will FAIL
try {
Float.parseFloat(germanNumber); // Throws NumberFormatException
} catch (NumberFormatException e) {
System.out.println("Float.parseFloat failed: " + e.getMessage());
}
// This will SUCCEED
NumberFormat format = NumberFormat.getInstance(Locale.GERMAN);
try {
float f = format.parse(germanNumber).floatValue();
System.out.println("NumberFormat success: " + f);
} catch (Exception e) {
System.out.println("NumberFormat failed: " + e.getMessage());
}
}
}
Output:
Float.parseFloat failed: For input string: "123,45"
NumberFormat success: 123.45
b) Leading and Trailing Whitespaces
The parseFloat method is generally good at ignoring leading and trailing whitespaces.
String strWithSpaces = " 99.99 "; float f = Float.parseFloat(strWithSpaces); System.out.println(f); // Output: 99.99
c) Special Floating-Point Values
You can parse the special string representations for infinity and "not a number".
String posInf = "Infinity"; String negInf = "-Infinity"; String nan = "NaN"; float f1 = Float.parseFloat(posInf); // Float.POSITIVE_INFINITY float f2 = Float.parseFloat(negInf); // Float.NEGATIVE_INFINITY float f3 = Float.parseFloat(nan); // Float.NaN System.out.println(f1); // Output: Infinity System.out.println(f2); // Output: -Infinity System.out.println(f3); // Output: NaN
Summary: Which Method to Use?
| Method | Return Type | When to Use |
|---|---|---|
Float.parseFloat(String) |
float (primitive) |
The default choice. Use when you need a primitive float value and the input format is standard (period as decimal separator). |
Float.valueOf(String) |
Float (object) |
Use if you specifically need a Float object, for example, to store it in a collection that doesn't accept primitives. |
NumberFormat.parse() |
Number (object) |
Use for locale-specific parsing. Essential when your input might use commas as decimal separators or follow other locale-specific number formats. |
Final Recommendation:
- For most cases, use
Float.parseFloat()and wrap it in atry-catchblock to handleNumberFormatException. - If you are dealing with user input from different countries or systems, use
NumberFormatfor robust, locale-aware conversion.
