Usuário com melhor resposta
ARREDONDAMENTO PARA MAIS EM UMA DIVISÃO DE ENTRE CAMPOS

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
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
-
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
-
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
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
-
-
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
-
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
-
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
- Editado Fulvio Cezar Canducci Dias segunda-feira, 2 de janeiro de 2017 19:39
-