Dlaczego tak
DECIMAL(7,2) to typ stałoprzecinkowy: przechowuje 7 cyfr znaczących, z czego 2 po przecinku, więc 12345,67 mieści się w nim dokładnie. FLOAT i DOUBLE są zmiennoprzecinkowe i zapisują wartość w przybliżeniu binarnym — sumowanie wielu kwot daje wtedy różnice rzędu ułamków grosza. INT nie przechowa części ułamkowej.