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/10 21:52:24 UTC

incubator-groovy git commit: GROOVY-6922 - JsonSlurper loses trailing 0's in numbers (closes #184)

Repository: incubator-groovy
Updated Branches:
  refs/heads/master 84467fddc -> afc68839d


GROOVY-6922 - JsonSlurper loses trailing 0's in numbers (closes #184)


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

Branch: refs/heads/master
Commit: afc68839db7a20a0800f6963d5f1a54efdd0771b
Parents: 84467fd
Author: John Wagenleitner <jo...@gmail.com>
Authored: Sat Nov 7 12:50:14 2015 -0800
Committer: pascalschumacher <pa...@gmx.net>
Committed: Tue Nov 10 21:51:43 2015 +0100

----------------------------------------------------------------------
 .../java/groovy/json/internal/CharScanner.java  | 17 +--------------
 .../groovy/json/internal/CharScannerTest.groovy | 22 ++++++++++++++++++++
 2 files changed, 23 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/afc68839/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
index f140cf6..e110943 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
@@ -653,23 +653,8 @@ public class CharScanner {
             } else {
                 value = parseLongFromTo(buffer, from, index);
             }
-        } else if (foundDot && simple) {
-            BigDecimal lvalue;
-
-            if (length < powersOf10.length) {
-                if (isInteger(buffer, from, length)) {
-                    lvalue = new BigDecimal(parseIntFromToIgnoreDot(buffer, from, index));
-                } else {
-                    lvalue = new BigDecimal(parseLongFromToIgnoreDot(buffer, from, index));
-                }
-
-                BigDecimal power = new BigDecimal(powersOf10[digitsPastPoint]);
-                value = lvalue.divide(power);
-            } else {
-                value = new BigDecimal(new String(buffer, from, length));
-            }
         } else {
-            value = new BigDecimal(new String(buffer, from, index - from));
+            value = parseBigDecimal(buffer, from, length);
         }
 
         if (size != null) {

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/afc68839/subprojects/groovy-json/src/test/groovy/groovy/json/internal/CharScannerTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/test/groovy/groovy/json/internal/CharScannerTest.groovy b/subprojects/groovy-json/src/test/groovy/groovy/json/internal/CharScannerTest.groovy
index 70df7c8..e5e69b6 100644
--- a/subprojects/groovy-json/src/test/groovy/groovy/json/internal/CharScannerTest.groovy
+++ b/subprojects/groovy-json/src/test/groovy/groovy/json/internal/CharScannerTest.groovy
@@ -624,6 +624,28 @@ class CharScannerTest extends GroovyTestCase {
         )
     }
 
+    void testParseJsonNumberToDecimal() {
+        def num = CharScanner.parseJsonNumber('123.40'.toCharArray())
+        assert num instanceof BigDecimal
+        assert num == 123.40G
+        assert num.scale() == 2
+
+        num = CharScanner.parseJsonNumber('-123.400'.toCharArray())
+        assert num instanceof BigDecimal
+        assert num == -123.400G
+        assert num.scale() == 3
+
+        num = CharScanner.parseJsonNumber('3.7e-5'.toCharArray())
+        assert num instanceof BigDecimal
+        assert num == 0.000037G
+        assert num.scale() == 6
+
+        num = CharScanner.parseJsonNumber('-1.25E+7'.toCharArray())
+        assert num instanceof BigDecimal
+        assert num == -12500000.0G
+        assert num.scale() == -5
+    }
+
     protected assertArrayEquals(char[] expected, char[] actual) {
         assertArrayEquals((Object[]) expected, (Object[]) actual)
     }