Commit 16f548d3dda5b943c4ccaf74d97468bbb567cf10

Authored by Andrii Shvaika
1 parent 78ae90da

Fix behavior for simple double values

... ... @@ -229,7 +229,7 @@ public class JsonConverter {
229 229 String valueAsString = value.getAsString();
230 230 KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key);
231 231 var bd = new BigDecimal(valueAsString);
232   - if (bd.stripTrailingZeros().scale() <= 0) {
  232 + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
233 233 try {
234 234 return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build();
235 235 } catch (ArithmeticException e) {
... ... @@ -251,6 +251,10 @@ public class JsonConverter {
251 251
252 252 }
253 253
  254 + private static boolean isSimpleDouble(String valueAsString) {
  255 + return valueAsString.contains(".") && !valueAsString.contains("E") && !valueAsString.contains("e");
  256 + }
  257 +
254 258 public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
255 259 JsonObject object = json.getAsJsonObject();
256 260 return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build();
... ... @@ -260,7 +264,7 @@ public class JsonConverter {
260 264 String valueAsString = value.getAsString();
261 265 String key = valueEntry.getKey();
262 266 var bd = new BigDecimal(valueAsString);
263   - if (bd.stripTrailingZeros().scale() <= 0) {
  267 + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
264 268 try {
265 269 result.add(new LongDataEntry(key, bd.longValueExact()));
266 270 } catch (ArithmeticException e) {
... ...
... ... @@ -54,6 +54,12 @@ public class JsonConverterTest {
54 54 }
55 55
56 56 @Test
  57 + public void testParseAsDoubleWithZero() {
  58 + var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 42.0}"), 0L);
  59 + Assert.assertEquals(42.0, result.get(0L).get(0).getDoubleValue().get(), 0.0);
  60 + }
  61 +
  62 + @Test
57 63 public void testParseAsDouble() {
58 64 var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L);
59 65 Assert.assertEquals(1.1, result.get(0L).get(0).getDoubleValue().get(), 0.0);
... ...