diff --git a/humanfriendly/__init__.py b/humanfriendly/__init__.py index 4c0a333..faea0e3 100644 --- a/humanfriendly/__init__.py +++ b/humanfriendly/__init__.py @@ -284,9 +284,13 @@ def format_length(num_metres, keep_width=False): >>> format_length(0.004) '4 mm' """ - for unit in reversed(length_size_units): + units = list(reversed(length_size_units)) + for index, unit in enumerate(units): if num_metres >= unit['divider']: number = round_number(float(num_metres) / unit['divider'], keep_width=keep_width) + if index and float(number) >= units[index - 1]['divider'] / unit['divider']: + unit = units[index - 1] + number = round_number(float(num_metres) / unit['divider'], keep_width=keep_width) return pluralize(number, unit['singular'], unit['plural']) return pluralize(num_metres, 'metre') diff --git a/humanfriendly/tests.py b/humanfriendly/tests.py index 72dad99..e61d09f 100644 --- a/humanfriendly/tests.py +++ b/humanfriendly/tests.py @@ -544,6 +544,7 @@ def test_format_length(self): self.assertEqual('1 metre', format_length(1)) self.assertEqual('42 metres', format_length(42)) self.assertEqual('1 km', format_length(1 * 1000)) + self.assertEqual('1 km', format_length(999.999)) self.assertEqual('15.3 cm', format_length(0.153)) self.assertEqual('1 cm', format_length(1e-02)) self.assertEqual('1 mm', format_length(1e-03))