From 6d407f88a339f6ef905063096de21f266a41d020 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 30 May 2017 09:57:12 +0100 Subject: [PATCH] BAEL-821 New class that shows different rounding techniques. Updated POM. --- core-java/pom.xml | 7 ++++ .../main/java/com/baeldung/maths/Round.java | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/maths/Round.java diff --git a/core-java/pom.xml b/core-java/pom.xml index bcec20b1e1..5c9bf06a57 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -45,6 +45,12 @@ commons-math3 ${commons-math3.version} + + + org.decimal4j + decimal4j + ${decimal4j.version} + org.bouncycastle @@ -369,6 +375,7 @@ 1.55 1.10 3.6.1 + 1.0.3 2.5 4.1 4.01 diff --git a/core-java/src/main/java/com/baeldung/maths/Round.java b/core-java/src/main/java/com/baeldung/maths/Round.java new file mode 100644 index 0000000000..3b30ab2c7a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/maths/Round.java @@ -0,0 +1,38 @@ +package com.baeldung.maths; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; + +import org.apache.commons.math3.util.Precision; +import org.decimal4j.util.DoubleRounder; + +public class Round { + private static final double PI = 3.1415d; + + public static void main (String args[]) { + System.out.println("PI: " + PI); + System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); + // OUTPUTS: Value with 3 digits after decimal point 3.142 + DecimalFormat df = new DecimalFormat("###.###"); + System.out.println(df.format(PI)); + System.out.println(round(PI, 3)); + System.out.println(roundOptional(PI, 3)); + System.out.println(Precision.round(PI, 3)); + System.out.println(DoubleRounder.round(PI, 3)); + } + + public static double round(double value, int places) { + if (places < 0) throw new IllegalArgumentException(); + + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(places, RoundingMode.HALF_UP); + return bd.doubleValue(); + } + + public static double roundOptional(double value, int places) { + double scale = Math.pow(10, places); + double rounded = Math.round(value * scale) / scale; + return rounded; + } +}