Array
(
)

Não arredondar resultado

Gabriel Soares
   - 14 mar 2012

Olá a todos!
Estou com dificuldade no arredondamento de números.
Por exemplo: select 15 / 2 = 7.50
Acontece que no meu SQL está mostrando o resultado = 7.00.
O campo onde estou realizando a operação é do tipo DECIMAL(38,2).
Alguém poderia me ajudar?
Obrigado.

Bruno Leandro
   - 14 mar 2012

veja se desta forma arredonda corretamente

select cast( (CAST (15 as numeric(38,2)) / CAST (2 as numeric(38,2))) as numeric(38,2))

Gabriel Soares
   - 14 mar 2012

Oi Bruno!

Realmente seu código funciona, porém eu preciso de algo
mais direto, sem conversões e afins.

Simplesmente que SELECT 15/2 me retorne 7.5.

Já pensei até que fosse collation ou algo parecido, mas
por enquanto nada.

Obrigado...

Joel Rodrigues
   - 14 mar 2012

Cara, tente o seguinte teste:

SELECT 15/2.0
ou
SELECT 15.0/2

Aqui, pelo menos, deu 7.5 com várias casas decimais. Quando você põe apenas o número em representação inteira o ´´compilador´´ intende como um inteiro e a divisão de inteiros, retorna um inteiro (estranho, não? coisa de tipagem de dados). Em C/C++ você também pode observar isso, pelo menos em alguns compiladores.

Logo, você precisa garantir que os termos das operações sejam realmente decimais com a quantidade de casas que você deseja. Para o exemplo, a forma mais segura seria 15.0/2.0.

Boa sorte.

Alex Lekao
   - 14 mar 2012

Ola Gabriel, bom dia!!!

O resultado da sua divisão estão aparecendo da forma que mencionou diretamente no Sql ou no seu erp ou no programa que vc esta usando para desenvolver alguma aplicacao?

No meu caso aqui, fiz varias operações diretamente no banco de dados e todas apareceram com as decimais sendo respeitadas, em alguns caso com varias decimais, mas os meus campos estavam todos com os valores normais de campo numero decimal 15,2 por exemplo.

Mesmo fazendo as operações pegando um valor e dividindo por um valor fixo, exemplo: campox / 15, os cálculos mantiveram as decimais, ate mesmo qdo o resultado era um inteiro, exemplo 1, era exibido, 1.0000 por exemplo.

Acredito que seja mais uma questão de formatação do campo em seu erp ou no software para criar os aplicativos que vc esteja utilizando.

so para contar a estrutura do meu campo era: numeric(12,2)

Nao sei se isto ajudara vc mas achei que poderia ser útil de alguma maneira.

Tenha um bom dia!!!

Abraco.

Alex - Lekao

Bruno Leandro
   - 14 mar 2012

o resultado é inteiro porque é o padrão sql.

o normal quando dividimos dois número o resultado pode ser inteiro ou fração, mas no sql a divisão de um inteiro por outro inteiro é obtido como resultado um inteiro

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

Segundo o site:

Tipos de resultado

Retorna o tipo de dados do argumento com a precedência mais alta. Para obter mais informações, consulte Precedência de tipo de dados (Transact-SQL).

Se um dividend inteiro for dividido por um divisor inteiro, o resultado será um inteiro que terá truncada qualquer parte fracionária do resultado.

Gabriel Soares
   - 15 mar 2012

Bom dia!!!

Gostaria de agradecer a todos os que me ajudaram nesta questão dos arredondamentos.
Pelo visto terei de trabalhar com conversão ou inserindo . nos números
devido ao fato de estar dividindo dois inteiros.

A ajuda de vocês foi fundamental, até pelo fato de que várias cabeças pensam
melhor do que uma.

Novamente, Muito Obrigado!

Gabriel S.