let clean_int take & round non-integer numbers

This allows `clean_int` to handle non-integral values by casting to float before casting to integer.

Potential down-sides / gotchas:

- 1.000 can sometime mean 1000, not 1
- casting to integer rounds half-down, eg 0.6 to 1 but 0.5 to 0