C'est normal. Les arguments du transtypage par (int) ou intval() ne peuvent pas être des chaînes de caractères sous peine d'arrondis non voulus.
On peut utiliser les transtypages automatiques de PHP et tromper la bête!
<?php
echo (int) 0 + $donnees['pts_ml'];
?>
ripat