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 | 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); | ... | ... |