Commit 16f548d3dda5b943c4ccaf74d97468bbb567cf10
1 parent
78ae90da
Fix behavior for simple double values
Showing
2 changed files
with
12 additions
and
2 deletions
@@ -229,7 +229,7 @@ public class JsonConverter { | @@ -229,7 +229,7 @@ public class JsonConverter { | ||
229 | String valueAsString = value.getAsString(); | 229 | String valueAsString = value.getAsString(); |
230 | KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key); | 230 | KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key); |
231 | var bd = new BigDecimal(valueAsString); | 231 | var bd = new BigDecimal(valueAsString); |
232 | - if (bd.stripTrailingZeros().scale() <= 0) { | 232 | + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) { |
233 | try { | 233 | try { |
234 | return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build(); | 234 | return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build(); |
235 | } catch (ArithmeticException e) { | 235 | } catch (ArithmeticException e) { |
@@ -251,6 +251,10 @@ public class JsonConverter { | @@ -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 | public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { | 258 | public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { |
255 | JsonObject object = json.getAsJsonObject(); | 259 | JsonObject object = json.getAsJsonObject(); |
256 | return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); | 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,7 +264,7 @@ public class JsonConverter { | ||
260 | String valueAsString = value.getAsString(); | 264 | String valueAsString = value.getAsString(); |
261 | String key = valueEntry.getKey(); | 265 | String key = valueEntry.getKey(); |
262 | var bd = new BigDecimal(valueAsString); | 266 | var bd = new BigDecimal(valueAsString); |
263 | - if (bd.stripTrailingZeros().scale() <= 0) { | 267 | + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) { |
264 | try { | 268 | try { |
265 | result.add(new LongDataEntry(key, bd.longValueExact())); | 269 | result.add(new LongDataEntry(key, bd.longValueExact())); |
266 | } catch (ArithmeticException e) { | 270 | } catch (ArithmeticException e) { |
@@ -54,6 +54,12 @@ public class JsonConverterTest { | @@ -54,6 +54,12 @@ public class JsonConverterTest { | ||
54 | } | 54 | } |
55 | 55 | ||
56 | @Test | 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 | public void testParseAsDouble() { | 63 | public void testParseAsDouble() { |
58 | var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L); | 64 | var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L); |
59 | Assert.assertEquals(1.1, result.get(0L).get(0).getDoubleValue().get(), 0.0); | 65 | Assert.assertEquals(1.1, result.get(0L).get(0).getDoubleValue().get(), 0.0); |