From 0f85f247b6bc57d2be61a3929783a237a1635cd2 Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Mon, 22 Jan 2024 00:54:29 -0600 Subject: [PATCH] Fix rounding bug when displaying frequencies (#1801) --- firmware/application/string_format.cpp | 4 ++-- firmware/application/tone_key.cpp | 2 +- firmware/application/ui/ui_geomap.cpp | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/firmware/application/string_format.cpp b/firmware/application/string_format.cpp index 8a88f9b3..8a061cb1 100644 --- a/firmware/application/string_format.cpp +++ b/firmware/application/string_format.cpp @@ -185,7 +185,7 @@ std::string to_string_freq(const uint64_t f) { // right-justified frequency in MHz, rounded to 4 decimal places, always 9 characters std::string to_string_short_freq(const uint64_t f) { - auto final_str = to_string_dec_int(f / 1000000, 4) + "." + to_string_dec_int(((f + 50) / 100) % 10000, 4, '0'); + auto final_str = to_string_dec_int((f + 50) / 1000000, 4) + "." + to_string_dec_int(((f + 50) / 100) % 10000, 4, '0'); return final_str; } @@ -210,7 +210,7 @@ std::string to_string_rounded_freq(const uint64_t f, int8_t precision) { uint32_t divisor = pow10[6 - precision]; - final_str = to_string_dec_uint(f / 1000000) + "." + to_string_dec_int(((f + (divisor / 2)) / divisor) % pow10[precision], precision, '0'); + final_str = to_string_dec_uint((f + (divisor / 2)) / 1000000) + "." + to_string_dec_int(((f + (divisor / 2)) / divisor) % pow10[precision], precision, '0'); } return final_str; } diff --git a/firmware/application/tone_key.cpp b/firmware/application/tone_key.cpp index 44858786..8b640b4d 100644 --- a/firmware/application/tone_key.cpp +++ b/firmware/application/tone_key.cpp @@ -85,7 +85,7 @@ const tone_key_t tone_keys = { {"Senn. 32.768k", F2Ix100(32768.0)}}; std::string fx100_string(uint32_t f) { - return to_string_dec_uint(f / 100) + "." + to_string_dec_uint(((f + 5) / 10) % 10); + return to_string_dec_uint((f + 5) / 100) + "." + to_string_dec_uint(((f + 5) / 10) % 10); } float tone_key_frequency(tone_index index) { diff --git a/firmware/application/ui/ui_geomap.cpp b/firmware/application/ui/ui_geomap.cpp index 26bee41c..8de2b537 100644 --- a/firmware/application/ui/ui_geomap.cpp +++ b/firmware/application/ui/ui_geomap.cpp @@ -498,12 +498,13 @@ void GeoMap::draw_scale(Painter& painter) { if (m < 1000) { km_string = to_string_dec_uint(m) + "m"; } else { + m += 50; // (add rounding factor for div by 100 below) uint32_t km = m / 1000; m -= km * 1000; if (m == 0) { km_string = to_string_dec_uint(km) + " km"; } else { - km_string = to_string_dec_uint(km) + "." + to_string_dec_uint((m + 50) / 100, 1) + "km"; + km_string = to_string_dec_uint(km) + "." + to_string_dec_uint(m / 100, 1) + "km"; } }