diff --git a/circus/util.py b/circus/util.py
index 76bf43a7..e7324ce4 100644
--- a/circus/util.py
+++ b/circus/util.py
@@ -144,8 +144,8 @@ def bytes2human(n):
 
     for s in reversed(_SYMBOLS):
         if n >= prefix[s]:
-            value = int(float(n) / prefix[s])
-            return '%s%s' % (value, s)
+            value = round(float(n) / prefix[s], 2)
+            return '{:.2f}{}'.format(value, s)
     return "%sB" % n
 
 

diff --git a/circus/tests/test_util.py b/circus/tests/test_util.py
index 1b4256d0..e74f48e1 100644
--- a/circus/tests/test_util.py
+++ b/circus/tests/test_util.py
@@ -92,8 +92,10 @@ class TestUtil(TestCase):
         self.assertEqual(util.convert_opt('test', 1), '1')
 
     def test_bytes2human(self):
-        self.assertEqual(bytes2human(10000), '9K')
-        self.assertEqual(bytes2human(100001221), '95M')
+        self.assertEqual(bytes2human(100), '100B')
+        self.assertEqual(bytes2human(10000), '9.77K')
+        self.assertEqual(bytes2human(100001221), '95.37M')
+        self.assertEqual(bytes2human(1024 * 1024 * 2047), '2.00G')
         self.assertRaises(TypeError, bytes2human, '1')
 
     def test_human2bytes(self):
@@ -102,6 +104,8 @@ class TestUtil(TestCase):
         self.assertEqual(human2bytes('1129M'), 1183842304)
         self.assertEqual(human2bytes('67T'), 73667279060992)
         self.assertEqual(human2bytes('13P'), 14636698788954112)
+        self.assertEqual(human2bytes('1.99G'), 2136746229)
+        self.assertEqual(human2bytes('2.00G'), 2147483648)
         self.assertRaises(ValueError, human2bytes, '')
         self.assertRaises(ValueError, human2bytes, 'faoej')
         self.assertRaises(ValueError, human2bytes, '123KB')

mem_info not reliable
The human friendly representation gives integer representation instead of float which gives unreliable stats.
```
>>> from circus.util import bytes2human
>>> bytes2human(1024 * 1024 * 2047)
'1G'
>>> bytes2human(1024 * 1024 * 2048)
'2G'
```

The first example should return `1.99G` ideally. This is not critical when talking about megas but when we start talking about gigas or more it gets problematic.

Also why not always give a MiB representation in float (not string) ?

circus/tests/test_util.py::TestUtil::test_bytes2human
circus/tests/test_util.py::TestUtil::test_convert_opt circus/tests/test_util.py::TestUtil::test_load_virtualenv circus/tests/test_util.py::TestUtil::test_get_python_version circus/tests/test_util.py::TestUtil::test_working_dir_return_pwd_when_paths_are_equals circus/tests/test_util.py::TestUtil::test_negative_uid_gid circus/tests/test_util.py::TestUtil::test_tobool circus/tests/test_util.py::TestUtil::test_human2bytes circus/tests/test_util.py::TestUtil::test_parse_env_str circus/tests/test_util.py::TestUtil::test_to_uidgid circus/tests/test_util.py::TestUtil::test_replace_gnu_args circus/tests/test_util.py::TestUtil::test_get_info circus/tests/test_util.py::TestUtil::test_to_uid circus/tests/test_util.py::TestUtil::test_get_info_still_works_when_denied_access circus/tests/test_util.py::TestUtil::test_to_gid_str circus/tests/test_util.py::TestUtil::test_to_uid_str