Pages

Saturday, November 6, 2021

Java Format Double - Double With 2 Decimal Points Examples

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.
Java Format Double - Double With 2 Decimal Points Examples



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.