The numpy cast from arrow will reuse the same precision of the arrow data. It doesn’t reduce the precision 
The precision of the arrow data is defined by the features field of the dataset. For example to have double precision you need
features = Features({"col1": Value("double")})