none
ARREDONDAMENTO PARA MAIS EM UMA DIVISÃO DE ENTRE CAMPOS RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Criei uma tabela com três campos ([MÊS varcchar,7], [S.A, int, nulo], [TEMPO, int, null]).

    Quando eu faço essa divisão utilizando o round ROUND ([TEMPO] / [S.A],02) AS T_MÉDIO, não consigo obter o valor arredondado. Exemplo

    1- (1036/124=8,35), mas no sql ele o resultado é 8;

    2 - (2258/103=21,92 ou arredondado seria 22, mas no sql o resultado é 21.

    Nesse sentido, preciso de apoio para arredondar ou que apresente as casas decimais.


    • Editado ARMANDO_SQL segunda-feira, 2 de janeiro de 2017 18:46
    segunda-feira, 2 de janeiro de 2017 18:45

Respostas

  • Olá Armando,

    Isso acontece pois seus dois valores estão em INT, dessa forma o resultado da divisão é apenas um INT.

    Para ter o efeito desejado, você precisa converter um dos valores para um tipo de ponto flutuante, como o FLOAT por exemplo. Dá uma olhada:

    SELECT ROUND(CAST(TEMPO AS FLOAT) / [S.A], 2) AS T_MÉDIO

    Fazendo como o exemplo acima terá o efeito desejado.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:03
    segunda-feira, 2 de janeiro de 2017 19:03
  • Boa tarde.

    Use o campo float para exibição das casas decimais. e para formatar, use a função "FORMAT"

    https://msdn.microsoft.com/pt-br/library/ee634561(v=sql.120).aspx

    abraços

    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:02
    segunda-feira, 2 de janeiro de 2017 18:54
  • Isso está acontecendo pela definição dos seus campos.

    de uma olhada nesse exemplo

    DECLARE @TEMPO INT , @SA INT , @MeS VARCHAR(7)
    
    SET @TEMPO  =1036;
    
    SET @SA  =124;
    
    SELECT  CAST(@TEMPO  AS DECIMAL) / CAST(@SA AS DECIMAL) AS [Media sem Arredondamento]
    
    SELECT   ROUND(CAST(@TEMPO  AS DECIMAL) / CAST(@SA AS DECIMAL),2) AS [Media com Arredondamento]
    
    SELECT   CAST(CAST(@TEMPO  AS DECIMAL(18,2)) / CAST(@SA AS DECIMAL(18,2)) AS DECIMAL(18,2))  AS [Media com duas Casas]


    Saudações,,

    Por favor, marque-o como respondidas se esta respondeu a sua pergunta  
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET



    • Editado Wesley Neves segunda-feira, 2 de janeiro de 2017 19:28 correção
    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:03
    segunda-feira, 2 de janeiro de 2017 19:18

Todas as Respostas

  • Boa tarde.

    Use o campo float para exibição das casas decimais. e para formatar, use a função "FORMAT"

    https://msdn.microsoft.com/pt-br/library/ee634561(v=sql.120).aspx

    abraços

    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:02
    segunda-feira, 2 de janeiro de 2017 18:54
  • Marcus,

    Então é preciso converter o campo int para float (numeric)?

    segunda-feira, 2 de janeiro de 2017 19:02
  • Olá Armando,

    Isso acontece pois seus dois valores estão em INT, dessa forma o resultado da divisão é apenas um INT.

    Para ter o efeito desejado, você precisa converter um dos valores para um tipo de ponto flutuante, como o FLOAT por exemplo. Dá uma olhada:

    SELECT ROUND(CAST(TEMPO AS FLOAT) / [S.A], 2) AS T_MÉDIO

    Fazendo como o exemplo acima terá o efeito desejado.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:03
    segunda-feira, 2 de janeiro de 2017 19:03
  • Isso está acontecendo pela definição dos seus campos.

    de uma olhada nesse exemplo

    DECLARE @TEMPO INT , @SA INT , @MeS VARCHAR(7)
    
    SET @TEMPO  =1036;
    
    SET @SA  =124;
    
    SELECT  CAST(@TEMPO  AS DECIMAL) / CAST(@SA AS DECIMAL) AS [Media sem Arredondamento]
    
    SELECT   ROUND(CAST(@TEMPO  AS DECIMAL) / CAST(@SA AS DECIMAL),2) AS [Media com Arredondamento]
    
    SELECT   CAST(CAST(@TEMPO  AS DECIMAL(18,2)) / CAST(@SA AS DECIMAL(18,2)) AS DECIMAL(18,2))  AS [Media com duas Casas]


    Saudações,,

    Por favor, marque-o como respondidas se esta respondeu a sua pergunta  
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET



    • Editado Wesley Neves segunda-feira, 2 de janeiro de 2017 19:28 correção
    • Marcado como Resposta ARMANDO_SQL terça-feira, 3 de janeiro de 2017 12:03
    segunda-feira, 2 de janeiro de 2017 19:18
  • Arrendondamento para cima é com CEILING, mas antes precisa fazer um cast para decimal, porque os valores estão fazendo a conta com inteiros ignorando os valores quebrados.
    SELECT Ceiling(TEMPO / SA) FROM
    (
    	SELECT CAST(SA AS DECIMAL(18,2)) SA,
    		   CAST(TEMPO AS DECIMAL(18,2)) TEMPO
    	FROM tempo
    ) AS C

    Fulvio C





    segunda-feira, 2 de janeiro de 2017 19:24
  • Deleted
    segunda-feira, 2 de janeiro de 2017 21:20