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