Float va stocker ta variable sous forme d'une division d'entiers. C'est "pas précis" (pour les très gros montants ou les très petits montants, tu risque d'avoir des trucs style 199999999999.9999 au lieu de 200000000000.0000 ce qui fout le bronx.
Decimal quand à lui c'est un stockage à la façon "chaîne de caractère", c'est à dire qu'il va stocker les chiffres éxacts, âchant qu'il est de mémoire limité à plus de chiffres, donc c'est mieu.
Un champ décimal se déclare normalement decimal(13,4) ce qui veut dire que tu veux 13 chiffres dont 4 après la virgule (donc avec mon exemple tu montes jusqu'à "1 000 000 000 - 0.0001"