Skip to content

Commit 40392a2

Browse files
committed
Improve the fix for issue 367
1 parent c7bc579 commit 40392a2

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

core/src/main/java/com/schibsted/spt/data/jslt/impl/NodeUtils.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,6 @@ private static JsonNode parseNumber(String number) {
150150
if (number.length() == 0)
151151
return null;
152152

153-
if (number.startsWith("-.")) {
154-
number = "-0." + number.substring(2);
155-
}
156-
157-
if (number.startsWith(".")) {
158-
number = "0" + number;
159-
}
160-
161153
int sign = 1;
162154
int pos = 0;
163155
if (number.charAt(0) == '-') {
@@ -167,8 +159,6 @@ private static JsonNode parseNumber(String number) {
167159
int intStart = pos;
168160

169161
int endInteger = scanDigits(number, pos);
170-
if (endInteger == pos)
171-
return null;
172162
if (endInteger == number.length()) {
173163
if (number.length() < 10)
174164
return new IntNode(Integer.parseInt(number));
@@ -180,7 +170,12 @@ else if (number.length() < 19)
180170

181171
// since there's stuff after the initial integer it must be either
182172
// the decimal part or the exponent
183-
long intPart = Long.parseLong(number.substring(intStart, endInteger));
173+
long intPart;
174+
if (endInteger == pos)
175+
intPart = 0; // this means there was no zero before the period
176+
else
177+
intPart = Long.parseLong(number.substring(intStart, endInteger));
178+
184179
pos = endInteger;
185180
double value = intPart * sign;
186181

core/src/test/resources/function-tests.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,16 @@
762762
"input" : "{}",
763763
"output" : "-10.0"
764764
},
765+
{
766+
"query" : "number(\".1E2\")",
767+
"input" : "{}",
768+
"output" : "10.0"
769+
},
770+
{
771+
"query" : "number(\"-.1E2\")",
772+
"input" : "{}",
773+
"output" : "-10.0"
774+
},
765775
{
766776
"query" : "number(\"0.1e-2\")",
767777
"input" : "{}",

functions.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,19 +152,21 @@ if it is a string that cannot be parsed, then the `fallback` value is
152152
returned.
153153

154154
The number format supported is the same as in JSON literals, except
155-
that leading zeroes are allowed.
155+
that leading zeroes are allowed, and it's allowed to omit the zero
156+
before the period.
156157

157158
Examples:
158159

159160
```
160-
number(23) => 23
161-
number("23") => 23
162-
number("023") => 23
163-
number(23.0) => 23.0
164-
number(.23) => 0.23
165-
number(-.23) => -0.23
166-
number(null) => null
167-
number("ab") => error
161+
number(23) => 23
162+
number("23") => 23
163+
number("023") => 23
164+
number(23.0) => 23.0
165+
number(".23") => 0.23
166+
number("-.23") => -0.23
167+
number(null) => null
168+
number("ab") => error
169+
number("ab", 0) => 0
168170
```
169171

170172
### _round(float) -> integer_

0 commit comments

Comments
 (0)