From 25de280068e766d2cb6b4e5d3984a62504daa790 Mon Sep 17 00:00:00 2001 From: iaforek Date: Fri, 2 Jun 2017 23:04:22 +0100 Subject: [PATCH] BAEL-821 Added more test and updated round methods. (#1973) * Code for Dependency Injection Article. * Added Java based configuration. Downloaded formatter.xml and reformatted all changed files. Manually changed tab into 4 spaces in XML configuration files. * BAEL-434 - Spring Roo project files generated by Spring Roo. No formatting applied. Added POM, java and resources folders. * Moved project from roo to spring-roo folder. * BAEL-838 Initial code showing how to remove last char - helper class and tests. * BAEL-838 Corrected Helper class and associated empty string test case. Added StringUtils.substing tests. * BAEL-838 Refromatted code using formatter.xml. Added Assert.assertEquals import. Renamed test to follow convention. Reordered tests. * BAEL-838 - Added regex method and updated tests. * BAEL-838 Added new line examples. * BAEL-838 Renamed RemoveLastChar class to StringHelper and added Java8 examples. Refactord code. * BAEL-838 Changed method names * BAEL-838 Tiny change to keep code consistant. Return null or empty. * BAEL-838 Removed unresolved conflict. * BAEL-821 New class that shows different rounding techniques. Updated POM. * BAEL-821 - Added unit test for different round methods. * BAEL-821 Changed test method name to follow the convention * BAEL-821 Added more test and updated round methods. --- .../main/java/com/baeldung/maths/Round.java | 13 +++++- .../java/com/baeldung/maths/RoundTest.java | 46 ++++++++++++++++++- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/maths/Round.java b/core-java/src/main/java/com/baeldung/maths/Round.java index 3b30ab2c7a..82eeba725c 100644 --- a/core-java/src/main/java/com/baeldung/maths/Round.java +++ b/core-java/src/main/java/com/baeldung/maths/Round.java @@ -17,7 +17,8 @@ public class Round { 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(roundNotPrecise(PI, 3)); + System.out.println(roundAvoid(PI, 3)); System.out.println(Precision.round(PI, 3)); System.out.println(DoubleRounder.round(PI, 3)); } @@ -25,12 +26,20 @@ public class Round { public static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); + BigDecimal bd = new BigDecimal(Double.toString(value)); + bd = bd.setScale(places, RoundingMode.HALF_UP); + return bd.doubleValue(); + } + + public static double roundNotPrecise(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) { + public static double roundAvoid(double value, int places) { double scale = Math.pow(10, places); double rounded = Math.round(value * scale) / scale; return rounded; diff --git a/core-java/src/test/java/com/baeldung/maths/RoundTest.java b/core-java/src/test/java/com/baeldung/maths/RoundTest.java index 2621cfb65c..95db146414 100644 --- a/core-java/src/test/java/com/baeldung/maths/RoundTest.java +++ b/core-java/src/test/java/com/baeldung/maths/RoundTest.java @@ -14,7 +14,8 @@ public class RoundTest { @Test public void givenDecimalNumber_whenRoundToNDecimalPlaces_thenGetExpectedResult() { Assert.assertEquals(expected, Round.round(value, places), delta); - Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertEquals(expected, Round.roundAvoid(value, places), delta); Assert.assertEquals(expected, Precision.round(value, places), delta); Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); @@ -22,7 +23,48 @@ public class RoundTest { expected = 2.035d; Assert.assertEquals(expected, Round.round(value, places), delta); - Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertEquals(expected, Round.roundAvoid(value, places), delta); + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + + value = 1000.0d; + places = 17; + expected = 1000.0d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 92.23372036854776 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + + value = 256.025d; + places = 2; + expected = 256.03d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertNotEquals(expected, Round.roundNotPrecise(value, places), delta); // Returns: 256.02 ! + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 256.02 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertNotEquals(expected, DoubleRounder.round(value, places), delta); // Returns: 256.02 ! + + value = 260.775d; + places = 2; + expected = 260.78d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertNotEquals(expected, Round.roundNotPrecise(value, places), delta); // Returns: 260.77 ! + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 260.77 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertNotEquals(expected, DoubleRounder.round(value, places), delta); // Returns: 260.77 ! + + value = 90080070060.1d; + places = 9; + expected = 90080070060.1d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 9.223372036854776E9 ! Assert.assertEquals(expected, Precision.round(value, places), delta); Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); }