1. Overview
In this tutorial, We'll learn how to convert the String into double and display double with 2 decimal points or 2 decimal places in java programming.
In the previous article, we have already discussed about how to convert String to Double value in 3 ways.
Getting the double with 2 decimal points can be done in many ways. we'll learn all the possible ways with example programs.
2. Double With 2 Decimal Points Using DecimalFormat Class
First, convert the string into double using Double.parseDouble() method.
Next, create the instance of DecimalFormat class as new DecimalFormat("0.00") and then call the format() method which returns the double value in string with 2 decimal places.
Below is the example program.
package com.javaprogramto.programs.strings.todouble.decimal; import java.text.DecimalFormat; public class StringToDoubleDecimalsPlaces1 { public static void main(String[] args) { String decimalValueInString = "9.144678376262"; // convert string to double double doubleDecimalValue = Double.parseDouble(decimalValueInString); System.out.println("Double in string : "+decimalValueInString); System.out.println("Double value : "+doubleDecimalValue); // decimalformat class DecimalFormat decimalFormat = new DecimalFormat("0.00"); System.out.println("Double with decimal places "+decimalFormat.format(doubleDecimalValue)); } }
Output:
Double in string : 9.144678376262 Double value : 9.144678376262 Double with decimal places 9.14
And also this DecimalFormat class provides the additional functionality to rounding up and down the decimal values using setRoundingMode() method as follows.
decimalFormat.setRoundingMode(RoundingMode.UP); System.out.println("Double with decimal places with rounding up : "+decimalFormat.format(doubleDecimalValue)); decimalFormat.setRoundingMode(RoundingMode.DOWN); System.out.println("Double with decimal places with rounding down : "+decimalFormat.format(doubleDecimalValue));
Output:
Double with decimal places with rounding up : 9.15 Double with decimal places with rounding down : 9.14
3. Double With 2 Decimal Points Using String.format()
Next approach is using String.format() method which is simple and does not provide rounding up options as DecimalFormat or BigDecimal classes.
let us write the example program on format() method.
public class StringToDoubleDecimalsPlaces2 { public static void main(String[] args) { String decimalValueInString = "9.144678376262"; // convert string to double double doubleDecimalValue = Double.parseDouble(decimalValueInString); System.out.println("Double in string : "+decimalValueInString); System.out.println("Double value : "+doubleDecimalValue); String strDoubleDecimals = String.format("%.2f", doubleDecimalValue); System.out.println("Double with 2 decimal values : "+strDoubleDecimals); } }
Output:
Double in string : 9.144678376262 Double value : 9.144678376262 Double with 2 decimal values : 9.14
4. Double With 2 Decimal Points Using BigDecimal class
Last way is using BigDecimal class. You need to pass the double number to the BigDecimal constructor and then call setScale() method with a number which is how many decimal points are needed and with the rounding mode.
And also setScale() method can take rounding mode also.
Look at the below example to get the more details about the BigDecimal for decimal places.
package com.javaprogramto.programs.strings.todouble.decimal; import java.math.BigDecimal; public class StringToDoubleDecimalsPlaces3 { public static void main(String[] args) { String decimalValueInString = "9.144678376262"; // convert string to double double doubleDecimalValue = Double.parseDouble(decimalValueInString); System.out.println("Double in string : "+decimalValueInString); System.out.println("Double value : "+doubleDecimalValue); // BigDecimal BigDecimal bigDecimal = new BigDecimal(doubleDecimalValue); bigDecimal.setScale(2); System.out.println(""+bigDecimal.doubleValue()); } }
Output:
Double in string : 9.144678376262 Double value : 9.144678376262 Exception in thread "main" java.lang.ArithmeticException: Rounding necessary at java.base/java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4628) at java.base/java.math.BigDecimal.needIncrement(BigDecimal.java:4835) at java.base/java.math.BigDecimal.divideAndRound(BigDecimal.java:4810) at java.base/java.math.BigDecimal.setScale(BigDecimal.java:2910) at java.base/java.math.BigDecimal.setScale(BigDecimal.java:2952) at com.javaprogramto.programs.strings.todouble.decimal.StringToDoubleDecimalsPlaces3.main(StringToDoubleDecimalsPlaces3.java:20)
Program execution is failed because of Rounding mode was not provided to the big decimal object. So, Rounding mode is mandatory to work with the setScale() method.
Added now RoundingMode.DOWN value to the setScale() method.
package com.javaprogramto.programs.strings.todouble.decimal; import java.math.BigDecimal; import java.math.RoundingMode; public class StringToDoubleDecimalsPlaces3 { public static void main(String[] args) { String decimalValueInString = "9.144678376262"; // convert string to double double doubleDecimalValue = Double.parseDouble(decimalValueInString); System.out.println("Double in string : "+decimalValueInString); System.out.println("Double value : "+doubleDecimalValue); // BigDecimal BigDecimal bigDecimal = new BigDecimal(doubleDecimalValue).setScale(2, RoundingMode.DOWN); //bigDecimal.setScale(0, RoundingMode.HALF_UP); System.out.println("Two decimals : "+bigDecimal.doubleValue()); } }
Output:
Double in string : 9.144678376262 Double value : 9.144678376262 Two decimals : 9.14
5. Double With 2 Decimal Points Using Formatter, NumberFormat, printf()
There are many other ways alos. Few of them are shown in the below example.
package com.javaprogramto.programs.strings.todouble.decimal; import java.text.NumberFormat; import java.util.Formatter; public class StringToDoubleDecimalsPlaces4 { public static void main(String[] args) { double doubleDecimalValue = 9.144678376262; System.out.println("Double value : " + doubleDecimalValue); // 1. NumberFormat NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(2); System.out.println("Number format : " + nf.format(doubleDecimalValue)); // 2. Formatter Formatter formatter = new Formatter(); formatter.format("%.2f", doubleDecimalValue); System.out.println("Formatter : " + formatter.toString()); // 3. Printf System.out.printf("printf : Double upto 2 decimal places: %.2f", doubleDecimalValue); } }
Output:
Double value : 9.144678376262 Number format : 9.14 Formatter : 9.14 printf : Double upto 2 decimal places: 9.14
6. Conclusion
In this article, we've seen how to display and format the double value to double 2 decimal places using many methods.
And also we can use the apache commons math api method Precision.round(2, doubleValue).
No comments:
Post a Comment
Please do not add any spam links in the comments section.