Skip to content

Commit a5d83ab

Browse files
committed
[FIXED] fixed number parsing when '_' is included
1 parent 9275530 commit a5d83ab

2 files changed

Lines changed: 40 additions & 6 deletions

File tree

  • core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/format/tson/parser/custom
  • test/nuts-runtime-test/src/test/java/net/thevpc/nuts/core/test

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/format/tson/parser/custom/TsonCustomLexer.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1939,13 +1939,14 @@ private NElementTokenImpl readNormalNumber(StringBuilder image, int line, int co
19391939
}
19401940
case AUTO: // auto detect
19411941
default: {
1942-
if (info.baseValue.contains(".") || info.baseValue.contains("e") || info.baseValue.contains("E")) {
1942+
String baseValue = info.baseValue.replace("_", "");
1943+
if (baseValue.contains(".") || baseValue.contains("e") || baseValue.contains("E")) {
19431944
numberElementType = NElementType.DOUBLE;
19441945
try {
1945-
numberValue = (Double.parseDouble(info.baseValue));
1946+
numberValue = (Double.parseDouble(baseValue));
19461947
} catch (Exception ex) {
19471948
try {
1948-
numberValue = new BigDecimal(info.baseValue);
1949+
numberValue = new BigDecimal(baseValue);
19491950
numberElementType = NElementType.BIG_DECIMAL;
19501951
} catch (Exception ex2) {
19511952
errorMessage = NMsg.ofC("%s", NExceptions.getErrorMessage(ex));
@@ -1955,14 +1956,14 @@ private NElementTokenImpl readNormalNumber(StringBuilder image, int line, int co
19551956
} else {
19561957
numberElementType = NElementType.INT;
19571958
try {
1958-
numberValue = (Integer.parseInt(info.baseValue));
1959+
numberValue = (Integer.parseInt(baseValue));
19591960
} catch (Exception ex) {
19601961
try {
1961-
numberValue = (Long.parseLong(info.baseValue));
1962+
numberValue = (Long.parseLong(baseValue));
19621963
numberElementType = NElementType.LONG;
19631964
} catch (Exception ex2) {
19641965
try {
1965-
numberValue = new BigInteger(info.baseValue);
1966+
numberValue = new BigInteger(baseValue);
19661967
numberElementType = NElementType.BIG_INT;
19671968
} catch (Exception ex3) {
19681969
errorMessage = NMsg.ofC("%s", NExceptions.getErrorMessage(ex));

test/nuts-runtime-test/src/test/java/net/thevpc/nuts/core/test/TsonParseTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,39 @@ public void test07() {
232232
String tson = "-1E-5hello";
233233
NElement parsed = NElementReader.ofTson().read(tson);
234234
TestUtils.println(parsed.toString());
235+
Assertions.assertEquals(-1E-5,parsed.asNumberValue().get());
236+
237+
tson = "2.1GHz";
238+
parsed = NElementReader.ofTson().read(tson);
239+
TestUtils.println(parsed.toString());
240+
Assertions.assertEquals(2.1,parsed.asNumberValue().get());
241+
242+
tson = "2.3_GHz";
243+
parsed = NElementReader.ofTson().read(tson);
244+
TestUtils.println(parsed.toString());
245+
Assertions.assertEquals(2.3,parsed.asNumberValue().get());
246+
247+
tson = "2_1.3_5_GHz";
248+
parsed = NElementReader.ofTson().read(tson);
249+
TestUtils.println(parsed.toString());
250+
Assertions.assertEquals(21.35,parsed.asNumberValue().get());
251+
252+
tson = "2__1.3__5_GHz";
253+
parsed = NElementReader.ofTson().read(tson);
254+
TestUtils.println(parsed.toString());
255+
Assertions.assertEquals(21.35,parsed.asNumberValue().get());
256+
257+
tson = "2__1_._3__5_GHz";
258+
parsed = NElementReader.ofTson().read(tson);
259+
TestUtils.println(parsed.toString());
260+
Assertions.assertEquals(21.35,parsed.asNumberValue().get());
261+
262+
tson = "2__1_._3__5___GHz";
263+
parsed = NElementReader.ofTson().read(tson);
264+
TestUtils.println(parsed.toString());
265+
Assertions.assertEquals(21.35,parsed.asNumberValue().get());
266+
267+
235268
}
236269

237270
@Test

0 commit comments

Comments
 (0)