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)
}