diff --git a/py/binary.c b/py/binary.c
index fed69f9d1b5bc2224b1460c9033a7c92407d498e..46a4eb694f6df021b7624d060acf04ee181c05e2 100644
--- a/py/binary.c
+++ b/py/binary.c
@@ -61,6 +61,10 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
                     size = 8; break;
                 case 'P': case 'O': case 'S':
                     size = sizeof(void*); break;
+                case 'f':
+                    size = sizeof(float); break;
+                case 'd':
+                    size = sizeof(double); break;
             }
             break;
         case '@': {
@@ -90,6 +94,12 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
                 case 'P': case 'O': case 'S':
                     align = alignof(void*);
                     size = sizeof(void*); break;
+                case 'f':
+                    align = alignof(float);
+                    size = sizeof(float); break;
+                case 'd':
+                    align = alignof(double);
+                    size = sizeof(double); break;
             }
         }
     }
@@ -252,10 +262,10 @@ void mp_binary_set_val_array(char typecode, void *p, mp_uint_t index, mp_obj_t v
     switch (typecode) {
 #if MICROPY_PY_BUILTINS_FLOAT
         case 'f':
-            ((float*)p)[index] = mp_obj_float_get(val_in);
+            ((float*)p)[index] = mp_obj_get_float(val_in);
             break;
         case 'd':
-            ((double*)p)[index] = mp_obj_float_get(val_in);
+            ((double*)p)[index] = mp_obj_get_float(val_in);
             break;
 #endif
         default:
diff --git a/tests/float/float_array.py b/tests/float/float_array.py
new file mode 100644
index 0000000000000000000000000000000000000000..c0f2c587cfefa6064726535d69d389cd82c20b18
--- /dev/null
+++ b/tests/float/float_array.py
@@ -0,0 +1,14 @@
+from array import array
+
+def test(a):
+    print(a)
+    a.append(1.2)
+    print(len(a), '%.3f' % a[0])
+    a.append(1)
+    a.append(False)
+    print(len(a), '%.3f %.3f' % (a[1], a[2]))
+    a[-1] = 3.45
+    print('%.3f' % a[-1])
+
+test(array('f'))
+test(array('d'))