diff --git a/CHANGELOG.md b/CHANGELOG.md index 89c2d694..a1be39c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 1.12.2 [TODO] +### Fixed +- Scientific notation for Doubles during raw data processing + ## 1.12.0 [2025-10-23] - Get review indicator endpoint diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java index 07aa8b67..75eef856 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java @@ -36,6 +36,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; +import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDateTime; import java.util.ArrayList; @@ -389,7 +390,7 @@ private static void convertToCollectedVar( // scalaire non null ? if (value != null && !(value instanceof List)) { // idem: on garde convertOneVar(entry, String, ...) - convertOneVar(collectedVariable, String.valueOf(value), variablesMap, 1, dest); + convertOneVar(collectedVariable, getValueString(value), variablesMap, 1, dest); } } } @@ -462,4 +463,15 @@ public Page findRawDataByCampaignIdAndDate(String campa } + //Utils + protected static String getValueString(Object value) { + if (value instanceof Double || value instanceof Float) { + BigDecimal bd = new BigDecimal(value.toString()); + return bd.stripTrailingZeros().toPlainString(); + } + if (value instanceof Number) { + return value.toString(); + } + return String.valueOf(value); + } } diff --git a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java index c37ab461..5bcd9a5c 100644 --- a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java +++ b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Map; +import static fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService.getValueString; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; class LunaticJsonRawDataServiceTest { @@ -570,4 +571,38 @@ private List prepareConvertTest(int rawDataSize, String campaignId, Stri } return interrogationIdList; } + + @Test + void getValueString_null_test(){ + Object stringObject = null; + + Assertions.assertThat(getValueString(stringObject)).isEqualTo("null"); + } + + @Test + void getValueString_string_test(){ + Object stringObject = "test"; + + Assertions.assertThat(getValueString(stringObject)).isEqualTo("test"); + } + @Test + void getValueString_int_test(){ + Object intObject = 10; + + Assertions.assertThat(getValueString(intObject)).isEqualTo("10"); + } + + @Test + void getValueString_float_test(){ + Object floatObject = 10.111f; + + Assertions.assertThat(getValueString(floatObject)).isEqualTo("10.111"); + } + + @Test + void getValueString_double_test(){ + Object doubleObject = 101010101010.111d; + + Assertions.assertThat(getValueString(doubleObject)).isEqualTo("101010101010.111"); + } } \ No newline at end of file