none
Conversão Decimal RRS feed

  • Pergunta

  • Senhores,

    estou com problemas para apresentar as casas decimais de uma divisão.

    Abaixo, o comando executado.

    SELECT CAST((69/60) AS DECIMAL(8,2))

    Resultado

    1.00

    Porém o resultado correto seria

    1,15

    Sei que é uma coisa basica, no entanto, não estou conseguindo enxergar onde estou errando.

    Desde de já obrigado pela ajuda!

    quarta-feira, 4 de julho de 2012 13:08

Respostas

  • Bom dia,

    Assim como o Ivan citou, isso ocorre pq está havendo uma divisão entre inteiros... o sql está usando a "matemática dos inteiros...", onde ele irá ignorar decimal/fração. Para ter o resultado esperado, voce pode converter somente o dividendo ou o divisor que ele tratará a divisao como uma conversão implicita.

    veja:

    SELECT (CAST(69 AS DECIMAL)/ 60)
    
    --Or
    SELECT CAST((CAST(69 AS DECIMAL)/ 60) AS DECIMAL(8,2))

    At.
    Rafael

    • Marcado como Resposta fdsilva6 quarta-feira, 4 de julho de 2012 14:09
    quarta-feira, 4 de julho de 2012 14:06

Todas as Respostas

  • PRINT CAST((convert(decimal(8,2),69)/convert(decimal(8,2),60)) AS DECIMAL(8,2))

    DECLARE 
    @TESTE DECIMAL(10,2),
    @A DECIMAL(8,2),
    @B DECIMAL(8,2)
    
    SET @A = 69;
    SET @B = 60; 
    SET @TESTE = @A/@B;
    
    PRINT @TESTE

    Olá,

    Você está com problemas devido ao SQL enteder que os valores 69 e 60 são do tipo Int então se você consultar a tabela de CAST você irá notar que nesse caso o resultado será truncado.

    http://msdn.microsoft.com/pt-br/library/ms187928.aspx

    Segue 2 exemplos que eu fiz para deixa pra você.


    Ivan Ferraz, MCP,MCTS Desenvolvedor 3 Estrelas ASP.NET


    quarta-feira, 4 de julho de 2012 13:54
  • Bom dia,

    Assim como o Ivan citou, isso ocorre pq está havendo uma divisão entre inteiros... o sql está usando a "matemática dos inteiros...", onde ele irá ignorar decimal/fração. Para ter o resultado esperado, voce pode converter somente o dividendo ou o divisor que ele tratará a divisao como uma conversão implicita.

    veja:

    SELECT (CAST(69 AS DECIMAL)/ 60)
    
    --Or
    SELECT CAST((CAST(69 AS DECIMAL)/ 60) AS DECIMAL(8,2))

    At.
    Rafael

    • Marcado como Resposta fdsilva6 quarta-feira, 4 de julho de 2012 14:09
    quarta-feira, 4 de julho de 2012 14:06