From eed9680699aff49edb6d663e4c2f007f0751b194 Mon Sep 17 00:00:00 2001 From: griffinonacid <156235025+griffinonacid@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:15:12 +0100 Subject: [PATCH] Voice Announcements remove "point zero" Check if total distance is a whole number to prevent TTS reading out "point zero" unnecessarily --- .../services/announcement/VoiceAnnouncementUtils.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java index bf0de22c4..05179f1b7 100644 --- a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java +++ b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java @@ -186,12 +186,13 @@ class VoiceAnnouncementUtils { TtsSpan.MeasureBuilder measureBuilder = new TtsSpan.MeasureBuilder() .setUnit(unit); - if (precision == 0) { + // Round before extracting integral and decimal parts + double roundedNumber = Math.round(Math.pow(10, precision) * number) / Math.pow(10.0, precision); + long integerPart = (long) roundedNumber; + + if (precision == 0 || (roundedNumber - integerPart) == 0) { measureBuilder.setNumber((long)number); } else { - // Round before extracting integral and decimal parts - double roundedNumber = Math.round(Math.pow(10, precision) * number) / Math.pow(10.0, precision); - long integerPart = (long) roundedNumber; // Extract the decimal part String fractionalPart = String.format("%." + precision + "f", (roundedNumber - integerPart)).substring(2); measureBuilder.setIntegerPart(integerPart)