You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/11/01 10:09:19 UTC

incubator-groovy git commit: GROOVY-7652: Float/Double trunc methods perform rounding for negative values (closes #171)

Repository: incubator-groovy
Updated Branches:
  refs/heads/master 8a7fadcde -> 5c54dcfdf


GROOVY-7652: Float/Double trunc methods perform rounding for negative values (closes #171)


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/5c54dcfd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/5c54dcfd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/5c54dcfd

Branch: refs/heads/master
Commit: 5c54dcfdf6916acbece5e7cd71b8e167d3b52de3
Parents: 8a7fadc
Author: John Wagenleitner <jo...@gmail.com>
Authored: Sat Oct 31 13:45:05 2015 -0700
Committer: pascalschumacher <pa...@gmx.net>
Committed: Sun Nov 1 10:08:27 2015 +0100

----------------------------------------------------------------------
 .../groovy/runtime/DefaultGroovyMethods.java      | 18 +++++++++++++++---
 .../runtime/DefaultGroovyMethodsTest.groovy       | 14 ++++++++++++++
 2 files changed, 29 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/5c54dcfd/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index f03c9d3..ad1974d 100644
--- a/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -14988,17 +14988,23 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.6.0
      */
     public static float trunc(Float number, int precision) {
+        if (number < 0f) {
+            return (float)(Math.ceil(number.doubleValue()*Math.pow(10,precision))/Math.pow(10,precision));
+        }
         return (float)(Math.floor(number.doubleValue()*Math.pow(10,precision))/Math.pow(10,precision));
     }
 
     /**
      * Truncate the value
      *
-     * @param number a Double
-     * @return the Double truncated to 0 decimal places (i.e. a synonym for floor)
+     * @param number a Float
+     * @return the Float truncated to 0 decimal places
      * @since 1.6.0
      */
     public static float trunc(Float number) {
+        if (number < 0f) {
+            return (float)Math.ceil(number.doubleValue());
+        }
         return (float)Math.floor(number.doubleValue());
     }
 
@@ -15029,10 +15035,13 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * Truncate the value
      *
      * @param number a Double
-     * @return the Double truncated to 0 decimal places (i.e. a synonym for floor)
+     * @return the Double truncated to 0 decimal places
      * @since 1.6.4
      */
     public static double trunc(Double number) {
+        if (number < 0d) {
+            return Math.ceil(number);
+        }
         return Math.floor(number);
     }
 
@@ -15045,6 +15054,9 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.6.4
      */
     public static double trunc(Double number, int precision) {
+        if (number < 0d) {
+            return Math.ceil(number *Math.pow(10,precision))/Math.pow(10,precision);
+        }
         return Math.floor(number *Math.pow(10,precision))/Math.pow(10,precision);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/5c54dcfd/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy b/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
index 9df1829..e92a337 100644
--- a/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
+++ b/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
@@ -73,6 +73,13 @@ public class DefaultGroovyMethodsTest extends GroovyTestCase {
         assertEquals(DefaultGroovyMethods.trunc(f, 4), 1000.1234f);
         assertEquals(DefaultGroovyMethods.trunc(f, 5), 1000.12345f);
         assertEquals(DefaultGroovyMethods.trunc(f, 6), 1000.123456f);
+
+        Float f2 = -123.739f
+
+        assertEquals(DefaultGroovyMethods.trunc(f2), -123.0f)
+        assertEquals(DefaultGroovyMethods.trunc(f2, 0), -123.0f)
+        assertEquals(DefaultGroovyMethods.trunc(f2, 1), -123.7f)
+        assertEquals(DefaultGroovyMethods.trunc(f2, 2), -123.73f)
     }
 
     public void testDoubleTruncate() throws Exception {
@@ -86,6 +93,13 @@ public class DefaultGroovyMethodsTest extends GroovyTestCase {
         assertEquals(DefaultGroovyMethods.trunc(d, 4), 1000.1234);
         assertEquals(DefaultGroovyMethods.trunc(d, 5), 1000.12345);
         assertEquals(DefaultGroovyMethods.trunc(d, 6), 1000.123456);
+
+        Double d2 = -123.739d
+
+        assertEquals(DefaultGroovyMethods.trunc(d2), -123.0d)
+        assertEquals(DefaultGroovyMethods.trunc(d2, 0), -123.0d)
+        assertEquals(DefaultGroovyMethods.trunc(d2, 1), -123.7d)
+        assertEquals(DefaultGroovyMethods.trunc(d2, 2), -123.73d)
     }
 
     // GROOVY-6626