Fix behavior for simple double values
This commit is contained in:
parent
78ae90da7a
commit
16f548d3dd
@ -229,7 +229,7 @@ public class JsonConverter {
|
|||||||
String valueAsString = value.getAsString();
|
String valueAsString = value.getAsString();
|
||||||
KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key);
|
KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key);
|
||||||
var bd = new BigDecimal(valueAsString);
|
var bd = new BigDecimal(valueAsString);
|
||||||
if (bd.stripTrailingZeros().scale() <= 0) {
|
if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
|
||||||
try {
|
try {
|
||||||
return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build();
|
return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build();
|
||||||
} catch (ArithmeticException e) {
|
} catch (ArithmeticException e) {
|
||||||
@ -251,6 +251,10 @@ public class JsonConverter {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isSimpleDouble(String valueAsString) {
|
||||||
|
return valueAsString.contains(".") && !valueAsString.contains("E") && !valueAsString.contains("e");
|
||||||
|
}
|
||||||
|
|
||||||
public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
|
public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
|
||||||
JsonObject object = json.getAsJsonObject();
|
JsonObject object = json.getAsJsonObject();
|
||||||
return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build();
|
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 {
|
|||||||
String valueAsString = value.getAsString();
|
String valueAsString = value.getAsString();
|
||||||
String key = valueEntry.getKey();
|
String key = valueEntry.getKey();
|
||||||
var bd = new BigDecimal(valueAsString);
|
var bd = new BigDecimal(valueAsString);
|
||||||
if (bd.stripTrailingZeros().scale() <= 0) {
|
if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
|
||||||
try {
|
try {
|
||||||
result.add(new LongDataEntry(key, bd.longValueExact()));
|
result.add(new LongDataEntry(key, bd.longValueExact()));
|
||||||
} catch (ArithmeticException e) {
|
} catch (ArithmeticException e) {
|
||||||
|
|||||||
@ -53,6 +53,12 @@ public class JsonConverterTest {
|
|||||||
Assert.assertEquals(10L, result.get(0).getLongValue().get().longValue());
|
Assert.assertEquals(10L, result.get(0).getLongValue().get().longValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParseAsDoubleWithZero() {
|
||||||
|
var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 42.0}"), 0L);
|
||||||
|
Assert.assertEquals(42.0, result.get(0L).get(0).getDoubleValue().get(), 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testParseAsDouble() {
|
public void testParseAsDouble() {
|
||||||
var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L);
|
var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user