Core Java

Round a Double to Two Decimal Places in Java

When working with financial or mathematical data in Java, it’s often necessary to truncate or round floating-point numbers to a specific number of decimal places. In many cases, we might want to truncate a double to just two decimal places for display or storage purposes. This article will explore several approaches to achieve this task in Java.

1. Using DecimalFormat(“0.00”)

Java’s DecimalFormat class provides a straightforward way to format numeric values. We can use it to truncate a double to two decimal places.

public class TruncateDoubleWithDecimalFormat {

    public static void main(String[] args) {
        
        double number = 123.456789;
        
        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        System.out.println("Truncated number: " + decimalFormat.format(number));
        
        decimalFormat.setRoundingMode(RoundingMode.DOWN);
        System.out.println("Truncated number with RoundingMode.DOWN: "+ decimalFormat.format(number));
        
        decimalFormat.setRoundingMode(RoundingMode.UP);
        System.out.println("Truncated number with RoundingMode.UP: "+ decimalFormat.format(number));
              
    }
}

In this approach, we create a DecimalFormat object with the pattern "0.00", which specifies that we want to keep exactly two decimal places. The 0 represents a required digit, so if there are fewer digits than the format specifies, leading zeroes will be added. This means that even if the input number has fewer than two decimal places, it will still be formatted to have two decimal places. Then, we use format() method to format the double number.

We set the rounding mode of the DecimalFormat object to RoundingMode.DOWN, which specifies that we want to truncate the decimal part without rounding up. We also set the rounding mode of the DecimalFormat object to RoundingMode.UP, which specifies that we want to round up the decimal part if it’s equal to or greater than 0.5.

The output from running the above code is:

Truncated number: 123.46
Truncated number with RoundingMode.DOWN: 123.45
Truncated number with RoundingMode.UP: 123.46

2 Using DecimalFormat(“#.##”)

We can also use a different pattern in DecimalFormat to achieve the same result with a slightly different behaviour.

        double number = 123.456789;        
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        System.out.println("Truncated Number using Pattern #.## is: " + decimalFormat.format(number));

In this approach, the pattern "#.##" specifies that we want to keep up to two decimal places, but unlike "0.00", the # represents an optional digit. This means that if the input number has fewer than two decimal places, they will not be displayed in the output.

2.1 Explanation of the Differences Between 0.00 and #.##

The key difference between these two approaches lies in how they handle numbers with fewer than two decimal places.

  • With DecimalFormat("0.00"), the output always contains exactly two decimal places, potentially adding trailing zeroes if the input number has fewer than two decimal places.
  • With DecimalFormat("#.##"), the output only includes decimal places if they are present in the input number, resulting in a more compact representation but potentially losing precision if the input number has more than two decimal places.

Example showing the differences

        double number1 = 123.4;
        double number2 = 123.40;

        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        DecimalFormat decimalFormat2 = new DecimalFormat("#.##");

        System.out.println("123.4 output with 0.00: " + decimalFormat.format(number1));
        System.out.println("123.4 output with #.##: " + decimalFormat2.format(number1));

        System.out.println("123.40 output with 0.00: " + decimalFormat.format(number2));
        System.out.println("123.40 output with #.##: " + decimalFormat2.format(number2));

Output is:

Fig 1: Output showing the difference between 0.00 and #.## using DecimalFormat - java double round two decimal places example
Fig 1: Output showing the difference between 0.00 and #.## using DecimalFormat – java double round two decimal places example

3. Using BigDecimal Class

BigDecimal provides precise numerical operations and is suitable for financial calculations. We can use it to truncate a double to two decimal places like this:

public class BigDecimalExample {

    public static void main(String[] args) {
       
        double number = 123.456789;
        
        BigDecimal bigDecimal = new BigDecimal(number);
        
        BigDecimal truncated = bigDecimal.setScale(2, BigDecimal.ROUND_DOWN);
        BigDecimal truncated2 = bigDecimal.setScale(2, BigDecimal.ROUND_UP);
        
        System.out.println("Truncated number using BigDecimal.ROUND_DOWN: " + truncated);
        System.out.println("Truncated number using BigDecimal.ROUND_UP: " + truncated2);
        
    }
}

In this approach, we create a BigDecimal object from the double number, then use setScale() method to specify the scale (number of decimal places) and BigDecimal.ROUND_DOWN rounding mode to truncate the number.

Output:

Truncated number using BigDecimal.ROUND_DOWN: 123.45
Truncated number using BigDecimal.ROUND_UP: 123.46

4. Using Math.round

Another approach is to use the Math.round() method to round the number to two decimal places. This method leverages multiplication and division to achieve truncation.

public class TruncateDoubleWithMaths {

    public static void main(String[] args) {
        
        double number = 123.456789;
        double truncated = Math.round(number * 100.0) / 100.0;
        System.out.println("Truncated number: " + truncated);
    }
}

Here, we multiply the number by 100 to shift the decimal point two places to the right, then round it using Math.round(), and finally divide by 100.0 to shift the decimal point back two places to the left.

5. Using String.format()

This approach uses string manipulation for formatting. Java’s String.format() method allows us to format a string representing a double with a specified number of decimal places like this:

public class TruncateDoubleWithStringManipulation {

    public static void main(String[] args) {
        
        double number = 123.456789;
        String truncated = String.format("%.2f", number);
        double result = Double.parseDouble(truncated);
        System.out.println("String Manipulation truncated number: " + result);
    }
}

In this approach, %.2f specifies that we want to format the number with two decimal places using floating-point format.

Output:

String Manipulation truncated number: 123.46

6. Conclusion

Truncating a double to two decimal places in Java can be achieved using various approaches as shown in this article. Each approach has its advantages and may be more suitable depending on the specific requirements of your application. Choose the approach that best fits your needs in terms of performance, readability, and maintainability.

7. Download the Source Code

This was an example of how to Round a Double to Two Decimal Places in Java.

Download
You can download the full source code of this example here: Round a Double to Two Decimal Places in Java

Omozegie Aziegbe

Omos holds a Master degree in Information Engineering with Network Management from the Robert Gordon University, Aberdeen. Omos is currently a freelance web/application developer who is currently focused on developing Java enterprise applications with the Jakarta EE framework.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
Back to top button