diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldState.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldState.java index 7f21f8d2e7..a837b5ebde 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldState.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldState.java @@ -67,6 +67,8 @@ public class SimpleCalculatedFieldState extends BaseCalculatedFieldState { ObjectNode valuesNode = JacksonUtil.newObjectNode(); if (result instanceof Double doubleValue) { valuesNode.put(outputName, doubleValue); + } else if (result instanceof Long longValue) { + valuesNode.put(outputName, longValue); } else if (result instanceof Integer integerValue) { valuesNode.put(outputName, integerValue); } else { diff --git a/application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java b/application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java index 4454d41e6e..35f637dc09 100644 --- a/application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java +++ b/application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java @@ -154,7 +154,7 @@ public class SimpleCalculatedFieldStateTest { Output output = getCalculatedFieldConfig().getOutput(); assertThat(result.getType()).isEqualTo(output.getType()); assertThat(result.getScope()).isEqualTo(output.getScope()); - assertThat(result.getResult()).isEqualTo(JacksonUtil.valueToTree(Map.of("output", 49))); + assertThat(result.getResult()).isEqualTo(JacksonUtil.valueToTree(Map.of("output", 49L))); } @Test @@ -184,7 +184,7 @@ public class SimpleCalculatedFieldStateTest { Output output = getCalculatedFieldConfig().getOutput(); assertThat(result.getType()).isEqualTo(output.getType()); assertThat(result.getScope()).isEqualTo(output.getScope()); - assertThat(result.getResult()).isEqualTo(JacksonUtil.valueToTree(Map.of("output", 35))); + assertThat(result.getResult()).isEqualTo(JacksonUtil.valueToTree(Map.of("output", 35L))); } @Test diff --git a/common/util/src/main/java/org/thingsboard/common/util/NumberUtils.java b/common/util/src/main/java/org/thingsboard/common/util/NumberUtils.java index 6681557c87..293120954d 100644 --- a/common/util/src/main/java/org/thingsboard/common/util/NumberUtils.java +++ b/common/util/src/main/java/org/thingsboard/common/util/NumberUtils.java @@ -36,12 +36,16 @@ public class NumberUtils { return BigDecimal.valueOf(value).setScale(0, RoundingMode.HALF_UP).intValue(); } + public static long toLong(double value) { + return BigDecimal.valueOf(value).setScale(0, RoundingMode.HALF_UP).longValue(); + } + public static Object roundResult(double value, Integer precision) { if (precision == null) { return value; } if (precision.equals(0)) { - return toInt(value); + return toLong(value); } return toFixed(value, precision); } diff --git a/common/util/src/test/java/org/thingsboard/common/util/NumberUtilsTest.java b/common/util/src/test/java/org/thingsboard/common/util/NumberUtilsTest.java index 1a1bf326e6..dabfe9cffc 100644 --- a/common/util/src/test/java/org/thingsboard/common/util/NumberUtilsTest.java +++ b/common/util/src/test/java/org/thingsboard/common/util/NumberUtilsTest.java @@ -51,11 +51,20 @@ public class NumberUtilsTest { assertThat(NumberUtils.toInt(28.0)).isEqualTo(28); } + @Test + public void toLong() { + assertThat(NumberUtils.toLong(doubleVal)).isEqualTo(1729L); + assertThat(NumberUtils.toLong(12.8)).isEqualTo(13L); + assertThat(NumberUtils.toLong(28.0)).isEqualTo(28L); + assertThat(NumberUtils.toLong(3_980_173_734.0)).isEqualTo(3_980_173_734L); + } + @Test public void roundResult() { assertThat(NumberUtils.roundResult(doubleVal, null)).isEqualTo(1729.1729); - assertThat(NumberUtils.roundResult(doubleVal, 0)).isEqualTo(1729); + assertThat(NumberUtils.roundResult(doubleVal, 0)).isEqualTo(1729L); assertThat(NumberUtils.roundResult(doubleVal, 2)).isEqualTo(1729.17); + assertThat(NumberUtils.roundResult(3_980_173_734.0, 0)).isEqualTo(3_980_173_734L); } }