From e350c8c3c3e3e646c6f14471cee3ff98166e24c9 Mon Sep 17 00:00:00 2001 From: Wouter Lagerweij Date: Sun, 17 Sep 2017 00:53:16 +0200 Subject: [PATCH 1/4] Rounding fix --- .../java/info/nightscout/utils/Round.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/utils/Round.java b/app/src/main/java/info/nightscout/utils/Round.java index 26a4d5abce..d8bc76502b 100644 --- a/app/src/main/java/info/nightscout/utils/Round.java +++ b/app/src/main/java/info/nightscout/utils/Round.java @@ -1,15 +1,42 @@ package info.nightscout.utils; +import android.support.annotation.NonNull; +import android.util.Log; + +import java.math.BigDecimal; + /** * Created by mike on 20.06.2016. */ public class Round { - public static Double roundTo(double x, Double step) { + public static Double roundTo(Double x, Double step) { + + if (step > 1) { + return roundToWhole(x, step); + } else { + return roundToNrOfDecimals(x, getDecimalsFromStep(step)); + } + } + + private static int getDecimalsFromStep(Double step) { + String stepString = Double.toString(step); + return stepString.substring(stepString.indexOf('.') + 1).length(); + } + + private static Double roundToNrOfDecimals(Double x, int decimals) { + BigDecimal number = new BigDecimal(Double.toString(x)); + number = number.setScale(decimals, BigDecimal.ROUND_HALF_UP); + + return number.doubleValue(); + } + + private static Double roundToWhole(Double x, Double step) { if (x != 0d) { return Math.round(x / step) * step; } return 0d; } + public static Double floorTo(Double x, Double step) { if (x != 0d) { return Math.floor(x / step) * step; From aaa3f648d071964aab4871bd3593be5a4c7785a1 Mon Sep 17 00:00:00 2001 From: Wouter Lagerweij Date: Sun, 17 Sep 2017 00:56:00 +0200 Subject: [PATCH 2/4] Removed unused imports --- app/src/main/java/info/nightscout/utils/Round.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/utils/Round.java b/app/src/main/java/info/nightscout/utils/Round.java index d8bc76502b..9cd2ea0acb 100644 --- a/app/src/main/java/info/nightscout/utils/Round.java +++ b/app/src/main/java/info/nightscout/utils/Round.java @@ -1,8 +1,5 @@ package info.nightscout.utils; -import android.support.annotation.NonNull; -import android.util.Log; - import java.math.BigDecimal; /** From 02c2213545d703e3a5861b83e54ffad8cc33c310 Mon Sep 17 00:00:00 2001 From: Wouter Lagerweij Date: Sun, 17 Sep 2017 14:27:49 +0200 Subject: [PATCH 3/4] Changed rounding to use BigDecimals to avoid noisy long doubles in output --- .../java/info/nightscout/utils/Round.java | 52 +++++++------------ .../java/info/nightscout/utils/RoundTest.java | 3 +- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/info/nightscout/utils/Round.java b/app/src/main/java/info/nightscout/utils/Round.java index 9cd2ea0acb..a45714ad45 100644 --- a/app/src/main/java/info/nightscout/utils/Round.java +++ b/app/src/main/java/info/nightscout/utils/Round.java @@ -7,43 +7,31 @@ import java.math.BigDecimal; */ public class Round { public static Double roundTo(Double x, Double step) { + return round(x, step, BigDecimal.ROUND_HALF_UP); + } - if (step > 1) { - return roundToWhole(x, step); - } else { - return roundToNrOfDecimals(x, getDecimalsFromStep(step)); - } + public static Double floorTo(Double x, Double step) { + return round(x, step, BigDecimal.ROUND_FLOOR); + } + + public static Double ceilTo(Double x, Double step) { + return round(x, step, BigDecimal.ROUND_CEILING); + } + + private static Double round(Double x, Double step, int roundingMode) { + BigDecimal numberToRound = new BigDecimal((Double.toString(x))); + BigDecimal stepSize = new BigDecimal((Double.toString(step))); + int scale = getDecimalsFromStep(step); + + numberToRound.setScale(scale, BigDecimal.ROUND_HALF_UP); + + BigDecimal rounded = numberToRound.divide(stepSize, 0, roundingMode).multiply(stepSize); + + return rounded.doubleValue(); } private static int getDecimalsFromStep(Double step) { String stepString = Double.toString(step); return stepString.substring(stepString.indexOf('.') + 1).length(); } - - private static Double roundToNrOfDecimals(Double x, int decimals) { - BigDecimal number = new BigDecimal(Double.toString(x)); - number = number.setScale(decimals, BigDecimal.ROUND_HALF_UP); - - return number.doubleValue(); - } - - private static Double roundToWhole(Double x, Double step) { - if (x != 0d) { - return Math.round(x / step) * step; - } - return 0d; - } - - public static Double floorTo(Double x, Double step) { - if (x != 0d) { - return Math.floor(x / step) * step; - } - return 0d; - } - public static Double ceilTo(Double x, Double step) { - if (x != 0d) { - return Math.ceil(x / step) * step; - } - return 0d; - } } diff --git a/app/src/test/java/info/nightscout/utils/RoundTest.java b/app/src/test/java/info/nightscout/utils/RoundTest.java index d95ab2b391..4ef1be054c 100644 --- a/app/src/test/java/info/nightscout/utils/RoundTest.java +++ b/app/src/test/java/info/nightscout/utils/RoundTest.java @@ -14,6 +14,8 @@ public class RoundTest { public void roundToTest() throws Exception { assertEquals( 0.55d, Round.roundTo(0.54d, 0.05d), 0.00000001d ); assertEquals( 1d, Round.roundTo(1.49d, 1d), 0.00000001d ); + assertEquals( 80d, Round.roundTo(65d, 40d), 0.00000001d ); + assertEquals( 0d, Round.roundTo(0d, 0.1d), 0.00000001d); } @Test @@ -27,5 +29,4 @@ public class RoundTest { assertEquals( 0.6d, Round.ceilTo(0.54d, 0.1d), 0.00000001d ); assertEquals( 2d, Round.ceilTo(1.49999d, 1d), 0.00000001d ); } - } \ No newline at end of file From 81aadcc1be5442c533b626f6429c09f5c87171ee Mon Sep 17 00:00:00 2001 From: boysim <18055382+boysim@users.noreply.github.com> Date: Sun, 17 Sep 2017 17:02:27 +0200 Subject: [PATCH 4/4] Update strings.xml --- app/src/main/res/values-nl/strings.xml | 54 +++++++++++++------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d35103cb36..e46d349236 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -39,7 +39,7 @@ Wacht op pomp. Klik om te vernieuwen. Wacht op pomp VIRTUELE POMP - Zichtbaar + Toon Upload status naar NS Tijdelijk basaal SQL Storing @@ -79,7 +79,7 @@ Knop 1 Knop 2 Knop 3 - Kalibratie naat xDrip verzonden + Kalibratie naar xDrip verzonden Annuleer Annuleer tijdelijk basaal Koolhydraten @@ -91,12 +91,12 @@ KOOLHYDRATEN & BOLUS Koolhydraten correctie CGM & OPENAPS - CGM Sensor geplaatst - CGM Sensor Start + CGM Sens. ingebracht + CGM Sens. Start Multiwave bolus Correctie bolus Sport - Insuline leeftijd + Ouderdom insuline IAGE Insuline ampul wissel Maaltijd bolus @@ -118,19 +118,19 @@ Splitzen Notitie OpenAPS Offline - Leeftijd batterij + Ouderdom batterij Profiel wissel Pomp - Pomp batterij wissel - Infusieplaats wissel + Pomp bat. wissel + Infuus wissel Vraag - Leeftijd sensor + Ouderdom sensor SAGE CP Snack bolus - Einde tijdelijk basaal - Begin tijdelijk basaal - Tijdelijk streefdoel + Einde tijd. basaal + Start tijd. basaal + Tijd. streefdoel Tijdelijk streefdoel annuleren Wijzig het ingegevene! Kind @@ -143,7 +143,7 @@ BG bron Beperkingen Algemeen - insuline + Insuline curve Ledig wachtrij Loop Nightscout versie: @@ -213,7 +213,7 @@ Om de bolus %.2fU toe te dienen antwoord met de code %s XDrip ontvangt geen callibraties Om calibratie %.2f te verzenden antwoord met de code %s - Callibratie verzonden. Het ontvangen van callibraties moet actief zijn in xDrip. + Kalibratie verzonden. Het ontvangen van kalibraties moet actief zijn in xDrip. 한국어 Taal Lokaal profiel @@ -269,7 +269,7 @@ Eind gebruiker overeenkomst Activeer de superbolus functie in de wizard. Activeer deze niet tot je begrijpt wat dit doet. OVERDOSISEN ZIJN MOGELIJK BIJ ONWETENDHEID Activeer superbolus in de wizard - Geactiveerd + Actief Toon niet opnieuw Eet binnenkort Verander basaal patroon @@ -306,7 +306,7 @@ URL: Nightscout URL ingeven Nightscout URL - Doelstelling + Streefdoel ISF NS API geheim Verkeerde ingave @@ -341,13 +341,13 @@ Nightscout Ok Basaal - Loop gedeactiveerd door beperkingen + Loop gedeactiveerd door doelen tab Loop menu Superbolus (%d m) Loop pauzeren Pauzeer (%d m) Batterij bijna leeg - Maneel + Manueel MDI Afbreken OK @@ -430,17 +430,17 @@ Periode Script debug Maaltijd gegevens - éénheid + Eénheid Doelen - Controleren dat BG beschikbaar is op Nightscout en dat de insulinepomp data is geupload - Opzetten van visualisatie en monitoring eveneens onalyze van basaal en ratio\'s - Werking in Open Loop modus voor enkele dagen, manueel vele tijdelijke basalen instellen + Controleren van beschikbaarheid BG en insuline pomp data op Nightscout + Opzetten van visualisatie en monitoring eveneens analyze van basaal en ratio\'s + In Open Loop modus werken voor enkele dagen, manueel tijdelijke basaal instellen Starten met de Open Loop modus - Gebaseerd op deze ervarinegen beslissen wat het maximale basaal mag zijn en dit in de pomp instellen + Gebaseerd op deze ervaringen beslissen wat het maximale basaal mag zijn en dit in de pomp instellen De Open Loop begrijpen, inclusief de voorgestelde tijdelijke basalen - In gesloten Loop werken met een max. IOB = 0 voor enkele dagen met een beperkt aantal LBG - Starten met gesloten Loop met lage glucose begrenzing - Gebruik enkele dagen en ten miinste 1 naght zonder een laag BG alarm voordat je je BG doel laat dalen + In closed Loop werken met een max. IOB = 0 gedurende enkele dagen met een beperkt aantal lage BG + Starten met closed Loop met bescherming tegen lage BG + Verhoog max. IOB en test enkele dagen alsook minstens 1 nacht zonder een laag BG alarm voordat je jouw BG doel laat dalen BG beschikbaar op NS Pas het basaal en de ratios aan indien nodig, activeer hierna de auto-sens optie Bereken nu @@ -627,7 +627,7 @@ Standaard waarde: 0.7 Dit is de andere kan van de autosens veiligheid limiet. Dit zet een limiet op hoe laag het basaal kan aangepast worden, en hoe hoog het ISF en het BG doel Standaard waarde: 2 Bolus snooze is actief nadat je een maaltijd bolus toegediend hebt, zodat de loop geen tegenvoorstel met een verlaagd tijdelijk basaal doet nadat je gegeten hebt. Het voorbeeld hier van van standaard 2; dus een 3 u DIA betekent dat de bolus snooze gemiddeld 1.5u actief is (3DIA/2). Standaard waarde: 4 Dit is een combinatie van enerzijds het OpenAPS veiligheid limieten en anderzijds van “3 x max dagelijks basaal ; 4x actueel”. Dit betekent dat het basaal niet hoger kan ingesteld worden dan het ingestelde nummer keer het actueel basaal waarbij de limiet in de pomp geen invloed heeft.Dit is een veiligheidsmaatregel om te vermijden dat patiënten in gevaarlijke laag bereik komen zonder te snappen hoe het algoritme werkt. Nogmaals de standaard waarde is 4x; de meeste zullen deze waarde nooit moeten aanpassen maar zullen eerder andere waardes moeten aanpassen als ze tegen een limiet aanstoten. - 1 week succesvol loop gedurende de dag met geregeld KH ingave + Gedurende 1 week succesvol closed loop met KH ingave Synchroniseer profiel met de pomp ACTIVITIJD & FEEDBACK Model: %02X Protokoll: %02X Code: %02X