Constantemente vejo alguns colegas (novatos em sua maioria) questionando em fóruns qual o tipo de dados deve ser utilizado para armazenar valores.
A resposta é simples, mas pode variar de banco de dados para banco de dados.
Em sua maioria, o mais utilizado é o Decimal, pois podemos especificar a quantidade de casas decimais queremos trabalhar.
Decimal(length,precision)
Vejamos um exemplo:
decimal(7,2)
Neste campo poderemos armazenar valores na casa de milhões, afinal ele aceitará 7 inteiros e dois decimais.
A opção decimal pode ser utilizada facilmente no MySQL e no PostgreSQL, já no SQL Server, além do Decimal, temos o Money, que também armazena informações do tipo moeda.
No Oracle, temos o Number(p,s), que tem o mesmo proposito do Decimal.
Uma curiosidade no MySQL é que, o banco armazena as informações como string ao invés de um número de ponto-flutuante binário, isto para preservar a precisão decimal destes valores.
Uma característica forte para o uso do Decimal é que, tipos como FLOAT ou DOUBLE não retornam precisão em seus resultados, vejamos um exemplo:
delimiter $
CREATE TABLE `trabalhando_com_valores` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`valor` double DEFAULT NULL,
`valor_2` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8$ Insert Into trabalhando_com_valores(valor,valor_2)
Values(10.52,8.73) De posse dos registros, façamos uma simples subtração:
Select (valor - valor_2) as result
From trabalhando_com_valores
result
1.7899999999999991 Logo, se precisar de valores precisos, evite o uso destes tipos de dados.
Um abraço e até a próxima.

legal.
Valew, tava procurando isso msm!
legal, exatamente que procurava!
Que bom que achou. Abraços.
Galera coloquei uma funçãozinha bem bacana pra retornar R$ no post abaixo…
http://paposql.blogspot.com.br/2011/12/funcao-para-formatar-moeda-em-reais-no.html