Devo usar decimal, float ou duplo para este resultado matemática simples?
-
19-08-2019 - |
Pergunta
Eu estou fazendo alguma matemática muito simples e salvar o resultado em um MS SQL2008 DB.
Eu sou média os alguns números, que são valores de byte entre 1 <-> 5. Quero gravar provavelmente apenas 2 casas decimais. Eu não me importo sobre o arredondamento para o 2º lugar decimal (ex. A 1.155 == 1.5 ou 1.6 .. Eu não estou muito gradual).
Então .. eu deveria armazenar o resultado médio como um float, decimal ou duplo?
Quando eu verificar o que retorna LINQ, ele pode retornar todos os três valores!
Por fim, o que seria o campo SQL tipo de dados relevantes, também.
aplausos!
Solução
O que você precisa é o tipo de dados decimal:
declare @val decimal(10,2)
select @val = 10.155
select @val
Ao introduzir valores, você quer pode contar com o construído em arredondamento, ou explicitamente decidir qual arredondamento você quer:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
Decimal (10,2) significa que os dígitos dez pode ser usado, e que dois deles estão a ser tomadas como sendo depois do ponto decimal. isto é, o número mais alto que decimal (4,2) pode conter é de 99,99. Tentando configurá-lo para 100 resultará em excesso aritmético.
Outras dicas
Decimal é principalmente uso para a moeda. Enquanto ele iria trabalhar, as pessoas podem encontrá-lo confuso. Neste caso eu acho flutuador seria uma escolha melhor.
Decimal - é o mais simples, no entanto nenhum dos mentined irá fazer o trabalho
Se você quiser armazenar os resultados usando o mínimo de espaço possível você provavelmente poderia fazer algo assim (pseudocódigo):
integer = ( sum(all_values) / all_values.count().float ) * 100;
Isto lhe dará o valor 352 para uma média de 3,52, assim você pode armazená-lo como um número inteiro (byte seria grande o suficiente eu acho), e apenas dividi-lo por 100 quando você quiser exibi-lo.
Por outro lado, se você não se preocupam com o armazenamento do valor médio, usando valores float é talvez mais rápido. (Test tanto para ver o que é realmente mais rápido em seu sistema.)