Of course! In Java, converting between String and double is a common task. The String class represents text, while the double primitive type represents a 64-bit floating-point number. You need to parse the text to get the number.

Here’s a comprehensive guide covering the best ways, common pitfalls, and advanced scenarios.
Converting String to double (Parsing)
This is the process of reading a string like "123.45" and converting it into a double value.
The Best Method: Double.parseDouble()
This is the standard, most efficient, and recommended way to convert a String to a double. It's a static method in the Double wrapper class.
Syntax:

double myDouble = Double.parseDouble(String myString);
Example:
public class StringToDouble {
public static void main(String[] args) {
String numberString = "3.14159";
double number = Double.parseDouble(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The double is: " + number);
System.out.println("Type of number: " + ((Object)number).getClass().getSimpleName()); // Prints "Double"
}
}
Output:
The string is: 3.14159
The double is: 3.14159
Type of number: Double
Handling Errors with try-catch
If the String does not contain a valid double representation, Double.parseDouble() will throw a NumberFormatException. Your program will crash if you don't handle this exception.
Example with Error Handling:

public class StringToDoubleSafe {
public static void main(String[] args) {
String[] testStrings = {"123.45", "hello", "123.45.67", null};
for (String s : testStrings) {
try {
if (s == null) {
throw new NumberFormatException("Input string cannot be null.");
}
double number = Double.parseDouble(s);
System.out.println("Successfully parsed '" + s + "' to: " + number);
} catch (NumberFormatException e) {
System.out.println("Error: Could not parse '" + s + "'. Reason: " + e.getMessage());
}
}
}
}
Output:
Successfully parsed '123.45' to: 123.45
Error: Could not parse 'hello'. Reason: For input string: "hello"
Error: Could not parse '123.45.67'. Reason: For input string: "123.45.67"
Error: Could not parse 'null'. Reason: Input string cannot be null.
Converting double to String
This is the process of converting a numerical double value into its text representation.
Method 1: Simple Concatenation (Easiest)
You can simply use the operator. Java will automatically call the toString() method for the double.
Example:
public class DoubleToString {
public static void main(String[] args) {
double myDouble = 98.6;
String myString = myDouble + ""; // Simple concatenation
System.out.println("The double is: " + myDouble);
System.out.println("The string is: " + myString);
System.out.println("Type of myString: " + myString.getClass().getSimpleName()); // Prints "String"
}
}
Output:
The double is: 98.6
The string is: 98.6
Type of myString: String
Method 2: Double.toString() (More Explicit)
This is essentially the same as the first method but more explicit about what you're doing. It's slightly more readable for some developers.
Example:
double myDouble = -123.456; String myString = Double.toString(myDouble); System.out.println(myString); // Output: -123.456
Method 3: String.format() (For Formatting)
This is the most powerful method when you need to control the format of the output, such as the number of decimal places, scientific notation, or adding a currency symbol.
Syntax:
String formattedString = String.format(formatString, myDouble);
Example:
public class DoubleToStringFormatted {
public static void main(String[] args) {
double price = 19.99;
double pi = 3.14159265;
double largeNumber = 1.23e4; // 12300.0
// Format to 2 decimal places (common for currency)
String formattedPrice = String.format("%.2f", price);
System.out.println("Price: " + formattedPrice); // Output: Price: 19.99
// Format to 4 decimal places
String formattedPi = String.format("%.4f", pi);
System.out.println("Pi (4 decimals): " + formattedPi); // Output: Pi (4 decimals): 3.1416
// Format with commas for thousands
String formattedLarge = String.format(",.2f", largeNumber);
System.out.println("Large Number: " + formattedLarge); // Output: Large Number: 12,300.00
// Scientific notation
String scientific = String.format("%e", pi);
System.out.println("Pi in scientific notation: " + scientific); // Output: Pi in scientific notation: 3.141593e+00
}
}
Output:
Price: 19.99
Pi (4 decimals): 3.1416
Large Number: 12,300.00
Pi in scientific notation: 3.141593e+00
Summary Table
| Conversion | Method | Key Characteristics | When to Use |
|---|---|---|---|
| String -> double | Double.parseDouble(s) |
- Static method - Throws NumberFormatException on failure- Most common and efficient |
The standard, go-to method for parsing. Always wrap in a try-catch block if the string might be invalid. |
| double -> String | "" + myDouble |
- Implicit via concatenation - Simple and concise |
Quick and easy conversions where no special formatting is needed. |
| double -> String | Double.toString(myDouble) |
- Explicit wrapper method - Same result as concatenation |
When you want to be very clear about your intent to convert to a string. |
| double -> String | String.format(...) |
- Highly configurable - Control decimal places, commas, scientific notation |
When you need to format the output precisely (e.g., for display, reports, or currency). |
Key Considerations
NumberFormatException: Always be aware that parsing can fail. Usetry-catchblocks to handle invalid input gracefully.- Locale Issues: The
Double.parseDouble()method expects a period () as the decimal separator, which is standard in the US and many other regions. If you are reading numbers from a file or user input in a locale that uses a comma () as the decimal separator (e.g., "123,45"),parseDoublewill fail. In such cases, you should useNumberFormat. - Precision:
doubleis a binary floating-point type and cannot represent all decimal numbers exactly (e.g.,1). This can lead to tiny precision errors. For financial calculations, consider usingBigDecimalinstead.
