From d275ee095b01517fbbb5340d39cd8b283fd640fc Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Tue, 19 Dec 2023 16:03:48 +0200 Subject: [PATCH] Fix to accomplish not loosing precision when showing higher values https://github.com/webmin/webmin/commit/bf97df452226b93040e986c5ff92fbcdb8ef967b --- ui-lib.pl | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/ui-lib.pl b/ui-lib.pl index 2ba046232..b23290ba0 100755 --- a/ui-lib.pl +++ b/ui-lib.pl @@ -859,16 +859,32 @@ sub ui_bytesbox { my ($name, $bytes, $size, $dis, $tags, $defaultunits) = @_; my $units = 1; +my $unit = 1024; + if ($bytes eq '' && $defaultunits) { $units = $defaultunits; } else { + my @units_solid; for(my $i=1; $i<=4; $i++) { - my $u = 1024**$i; - if ($bytes % $u == 0) { + my $u = $unit**$i; + if ($bytes >= $u) { $units = $u; + if ($bytes % $u == 0 && $bytes/$u <= $u) { + push(@units_solid, + { units => $units, + size => $bytes/$u }); + } } } + if (@units_solid) { + @units_solid = sort { $a->{'size'} <=> $b->{'size'} } @units_solid; + my $fsz = $bytes/$units; + my $fraction = $fsz - int($fsz); + my $decimal_nice = + $fraction == 0 || $fraction == 0.25 || $fraction == 0.5 || $fraction == 0.75; + $units = $units_solid[0]->{'units'} if (!($fsz =~ /\./ && $decimal_nice)); + } } if ($bytes ne "") { $bytes = sprintf("%.2f", ($bytes*1.0)/$units);