Repository: incubator-groovy
Updated Branches:
  refs/heads/GROOVY_2_4_X 18c6c6a6a -> 4c88790cd


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/4c88790c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/4c88790c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/4c88790c

Branch: refs/heads/GROOVY_2_4_X
Commit: 4c88790cd07dc50472072037dc12ece0144b4a11
Parents: 18c6c6a
Author: John Wagenleitner <john.wagenleit...@gmail.com>
Authored: Sat Nov 7 12:50:14 2015 -0800
Committer: pascalschumacher <pascalschumac...@gmx.net>
Committed: Tue Nov 10 21:53:19 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/4c88790c/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/4c88790c/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)
     }

Reply via email to