¿Debo usar decimal, flotante o doble para este simple resultado matemático?
-
19-08-2019 - |
Pregunta
Estoy haciendo algunos cálculos matemáticos muy simples y guardando el resultado en una base de datos MS SQL2008.
Estoy promediando algunos números, que son valores de bytes entre 1 < - > 5. Deseo registrar probablemente solo 2 decimales. No me importa redondear el segundo decimal (p. Ej., 1.155 == 1.5 o 1.6 ... no estoy demasiado escalonado).
Entonces ... ¿debo almacenar el resultado promedio como flotante, decimal o doble?
¡Cuando verifico lo que LINQ devuelve, puede devolver los tres valores!
Por último, cuál sería el campo de tipo de datos SQL relevante, también.
¡salud!
Solución
Lo que necesita es el tipo de datos DECIMAL:
declare @val decimal(10,2)
select @val = 10.155
select @val
Cuando ingresa valores, puede confiar en el redondeo incorporado o decidir explícitamente qué redondeo desea:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
Decimal (10,2) significa que se pueden usar diez dígitos, y que dos de ellos deben tomarse después del punto decimal. es decir, el número más alto que puede contener el decimal (4,2) es 99,99. Intentar establecerlo en 100 dará como resultado un desbordamiento aritmético.
Otros consejos
Decimal se usa principalmente para moneda. Si bien funcionaría, las personas podrían encontrarlo confuso. En este caso, creo que flotar sería una mejor opción.
Decimal: es el más simple, sin embargo, cualquiera de los mencionados hará el trabajo
Si desea almacenar los resultados utilizando el menor espacio posible, probablemente podría hacer algo como esto (pseudocódigo):
integer = ( sum(all_values) / all_values.count().float ) * 100;
Esto le dará el valor 352 para un promedio de 3.52 para que pueda almacenarlo como un entero (supongo que el byte sería lo suficientemente grande), y simplemente dividirlo por 100 cuando quiera mostrarlo.
Por otro lado, si no le importa el almacenamiento del valor promedio, el uso de valores flotantes es quizás más rápido. (Pruebe ambos para ver qué es realmente más rápido en su sistema).