Si lees con cuidado, verás que el DECIMAL(M,D) es un formato numérico que representa los decimales en base a dos parámetos: M, que representa el ancho total del numero incluyendo punto y decimales (
y no la longitud de la parte entera), y D que representa la cantidad de decimales que el mismo tendrá.
Cita: The declaration syntax for a DECIMAL column is DECIMAL(M,D). The ranges of values for the arguments in MySQL 5.1 are as follows:
* M is the maximum number of digits (the precision). It has a range of 1 to 65. (Older versions of MySQL permitted a range of 1 to 254.)
* D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M.
Esto significa que un número DECIMAL(3,0) es un entero, ya que tiene cero decimales... En ese contexto, un número como 999.99 es un DECIMAL(6,2), ya que 6 es el ancho total de la cifra y 2 la cantidad de decimales.
En este tipo de dato el punto decimal (siempre hablamos de punto, la coma es en español)
ocupa un espacio, a diferencia del FLOAT, cuya posición en la coma está dado por el ancho del tipo de dato (SINGLE, DOUBLE).
Respecto al signo, la definición de la representación binaria de números establece que un valor de punto flotante o decimal
es un valor con signo.