From b0482759e49a61103eff526416f2f57680932f97 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Mon, 9 Nov 2026 03:11:57 +0100 Subject: [PATCH] Roll human_size over to MB when KB rounds to 1024.0 (#5186) --- crates/ui-egui/src/panels.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/ui-egui/src/panels.rs b/crates/ui-egui/src/panels.rs index 6c4dd8225d..d22acc5284 100644 --- a/crates/ui-egui/src/panels.rs +++ b/crates/ui-egui/src/panels.rs @@ -40,7 +40,8 @@ pub(crate) enum Nav { pub fn human_size(n: usize) -> String { match n { - n if n >= 1 << 20 => format!("{:.1} MB", n as f64 / (1u64 << 20) as f64), + // A size that rounds to "1024.0 KB" reads as the next unit. + n if n as f64 / 1024.0 >= 1023.95 => format!("{:.1} MB", n as f64 / (1u64 << 20) as f64), n if n >= 1 << 10 => format!("{:.1} KB", n as f64 / (1u64 << 10) as f64), n => byte_count(n), } @@ -50,3 +51,16 @@ pub fn human_size(n: usize) -> String { pub fn byte_count(n: usize) -> String { crate::i18n::trn(crate::i18n::current(), n as u64, "{n} byte", "{n} bytes") } + +#[cfg(test)] +mod human_size_tests { + use super::human_size; + + #[test] + fn rounds_up_into_next_unit() { + assert_eq!(human_size(1_048_524), "1023.9 KB"); + assert_eq!(human_size(1_048_525), "1.0 MB"); + assert_eq!(human_size(1_048_575), "1.0 MB"); + assert_eq!(human_size(1_048_576), "1.0 MB"); + } +}