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;
+ }
+}