diff --git a/csppfetch/__init__.py b/csppfetch/__init__.py
index 04cad6b42318c2c6aff4b78fe946fa3b9ddb23e5..54bd1db1e084e7590f6f3f3df1ee806d3436338f 100644
--- a/csppfetch/__init__.py
+++ b/csppfetch/__init__.py
@@ -96,21 +96,45 @@ class FileSet:
 
 
 def human_bytes(total_bytes):
+    """ return nicely formatted string for a count of bytes
+
+    The result is rounded to the displayed precision,
+    so (1024**2)-512 is "1.00 MiB" but (1024**2)-513 is "1023 KiB"
+
+    >>> human_bytes(0)
+    '0 B'
+    >>> human_bytes(3836163)
+    '3.66 MiB'
+    >>> human_bytes((1024**2)-512)
+    '1.00 MiB'
+    >>> human_bytes((1024**2)-513)
+    '1023 KiB'
+    >>> human_bytes(7763153400)
+    '7.23 GiB'
+    """
     step_size = 1024
+    # Yes, it's "Ki", not "ki".
     steps = "Ki Mi Gi Ti Pi Ei".split()
     # If you prefer the non-binary SI prefixes
     # step_size = 1000
-    #     steps = [""]+list("kMGTPE")
+    # steps = "kMGTPE"
     if total_bytes < step_size:
         return f"{total_bytes} B"
     value = total_bytes
     step = -1
-    while value >= step_size:
+    while round(value,0) >= step_size:
         step += 1
         value /= step_size
-    value_str = f"{value:f}"[:4]
-    if value_str[-1] == ".":
-        value_str = value_str[:-1]
+
+    if round(value, 2) < 10:
+        value = round(value, 2)
+        value_str = f"{value:.2f}"
+    elif round(value, 1) < 100:
+        value = round(value, 1)
+        value_str = f"{value:.1f}"
+    else:
+        value = round(value, 0)
+        value_str = f"{value:.0f}"
 
     return f"{value_str} {steps[step]}B"
 
@@ -145,7 +169,7 @@ class DownloadStatistics:
         self.finish()
         speed = self.downloaded_size/(self.total_time().total_seconds())
         if speed < 100:
-            speed_str = "{speed} B"
+            speed_str = f"{speed} B"
         else:
             speed_str = human_bytes(speed)
         ret = [