Merge pull request #12437 from thingsboard/fix_bug/tbel/isDEcimalWithE

[TBEL] Fix parsing double with scientific notation
This commit is contained in:
Viacheslav Klimov 2025-02-28 15:53:09 +02:00 committed by GitHub
commit 3fb92f027b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 3 deletions

View File

@ -1299,7 +1299,7 @@ public class TbUtils {
if (str == null || str.isEmpty()) {
return -1;
}
return str.matches("[+-]?\\d+(\\.\\d+)?") ? DEC_RADIX : -1;
return str.matches("[+-]?\\d+(\\.\\d+)?([eE][+-]?\\d+)?") ? DEC_RADIX : -1;
}
public static int isHexadecimal(String str) {

View File

@ -442,8 +442,9 @@ public class TbUtilsTest {
@Test
public void parsDouble() {
String doubleValStr = "1729.1729";
Assertions.assertEquals(java.util.Optional.of(doubleVal).get(), TbUtils.parseDouble(doubleValStr));
String doubleValStr = "1.1428250947E8";
Assertions.assertEquals(Double.parseDouble(doubleValStr), TbUtils.parseDouble(doubleValStr));
doubleValStr = "1729.1729";
Assertions.assertEquals(0, Double.compare(doubleVal, TbUtils.parseHexToDouble(longValHex)));
Assertions.assertEquals(0, Double.compare(doubleValRev, TbUtils.parseHexToDouble(longValHex, false)));
Assertions.assertEquals(0, Double.compare(doubleVal, TbUtils.parseBigEndianHexToDouble(longValHex)));
@ -930,7 +931,13 @@ public class TbUtilsTest {
@Test
public void isDecimal_Test() {
Assertions.assertEquals(10, TbUtils.isDecimal("4567039"));
Assertions.assertEquals(10, TbUtils.isDecimal("1.1428250947E8"));
Assertions.assertEquals(10, TbUtils.isDecimal("123.45"));
Assertions.assertEquals(10, TbUtils.isDecimal("-1.23E-4"));
Assertions.assertEquals(10, TbUtils.isDecimal("1E5"));
Assertions.assertEquals(-1, TbUtils.isDecimal("C100110"));
Assertions.assertEquals(-1, TbUtils.isDecimal("abc"));
Assertions.assertEquals(-1, TbUtils.isDecimal(null));
}
@Test