¿Cuál es el mejor tipo de datos para mantener los valores porcentuales que van del 0.00% al 100.00%?Tipo de datos apropiado para mantener los valores porcentuales?
Respuesta
Suponiendo dos decimales en sus porcentajes, el tipo de datos que usa depende de cómo planea almacenar sus porcentajes. Si vas a almacenar su equivalente fraccionario (por ejemplo, 100.00% almacenado como 1.0000), almacenaría los datos en un tipo de datos decimal(5,4)
con una restricción CHECK
que asegura que los valores nunca excedan 1.0000 (suponiendo que sea el límite) y nunca vayas debajo de 0 (suponiendo que sea el piso). Si va a almacenar su valor nominal (por ejemplo, 100.00% se almacena como 100.00), entonces debe usar decimal(5,2)
con una restricción CHECK
apropiada. Combinado con un buen nombre de columna, deja en claro a otros desarrolladores qué datos son y cómo se almacenan los datos en la columna.
¿No debería ser 'decimal (5,2)' donde 2 denota el número de dígitos después del separador decimal? –
@BorisCallens - No puedo creer que me haya perdido todos estos años. Sí, eso es un error tipográfico. 'decimal (5,2)' es lo que se debe capturar con una restricción de verificación. – Thomas
Me alegro de ayudar :) –
Si 2 decimales es su nivel de precisión, entonces una "smallint" manejaría esto en el espacio más pequeño (2 bytes). Almacena el porcentaje multiplicado por 100.
EDITAR: El tipo decimal es probablemente una mejor combinación. Entonces no necesita escalar manualmente. Toma 5 bytes por valor.
Use numérico (n, n) donde n tiene suficiente resolución para redondear a 1.00. Por ejemplo:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)
Esta pregunta tiene una respuesta aceptada bastante alta de hace más de tres años. Si está buscando preguntas antiguas para responder, consulte aquí: http://stackoverflow.com/unanswered – valverij
- Hold como
decimal
. - Agregue restricciones de comprobación si desea limitar el rango (por ejemplo, entre 0 y 100%; en algunos casos, puede haber razones válidas para ir más allá del 100% o incluso en los negativos).
- Trate el valor 1 como 100%, 0.5 como 50%, etc. Esto permitirá que las operaciones matemáticas funcionen como se espera (es decir, a diferencia del uso del valor 100 como 100%).
- Modifique la precisión y la escala según sea necesario (estos son los dos valores entre paréntesis
columnName decimal(precision, scale)
. Precisión dice el número total de dígitos que pueden contenerse en el número, la escala indica cuántos de ellos están después del decimal, entoncesdecimal(3,2)
es número que puede representarse como#.##
;decimal(5,3)
sería##.###
decimal
ynumeric
son esencialmente la misma cosa Sin embargodecimal
es ANSI compatible, por lo que siempre usar que, a menos que se lo indique (por ejemplo, por las normas de codificación de su empresa)
Escenarios de ejemplo
- Para su caso (0.00% a 100.00%) desea
decimal(5,4)
. - Para el caso más común (0% a 100%), querrá
decimal(3,2)
. - En los dos, las restricciones de comprobación anteriores sería el mismo
Ejemplo:
if object_id('Demo') is null
create table Demo
(
Id bigint not null identity(1,1) constraint pk_Demo primary key
, Name nvarchar(256) not null constraint uk_Demo unique
, SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
, SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
)
Lectura adicional:
- decimal Escala & Precisión: http://msdn.microsoft.com/en-us/library/aa258832%28SQL.80%29.aspx
0 to 1
vs0 to 100
: C#: Storing percentages, 50 or 0.50?- decimal vs numérico: Is there any difference between DECIMAL and NUMERIC in SQL Server?
Estoy de acuerdo con Thomas y yo elegiría la DECIMAL (5,4) Solución al menos para las aplicaciones de WPF.
Tenga una mirada a la MSDN Numérico Cadena Formato de saber por qué: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
El porcentaje ("P") especificador de formato multiplica un número por 100 y la convierte en una cadena que representa un porcentaje.
allí tendría que ser capaz de utilizar esto en su código XAML:
DataFormatString="{}{0:P}"
- 1. Formato decimal para valores porcentuales?
- 2. ¿Se pueden usar los valores porcentuales en XAML?
- 3. Mostrar los valores porcentuales en Excel utilizando la API de POI
- 4. Uso de valores porcentuales para completar los elementos de la caja flexible
- 5. ¿Cuál es una buena estructura de datos para mantener los valores acumulados?
- 6. Gráfico: solamente mantener los datos más relevantes
- 7. Tipo de campo de datos apropiado para el valor verdadero/falso?
- 8. Mejor tipo de datos de VB.NET para almacenar valores de moneda
- 9. ¿Qué tipo de datos debo usar para almacenar valores monetarios?
- 10. Cómo subconjuntar la matriz en una columna, mantener el tipo de datos de matriz, mantener los nombres de fila/columna?
- 11. ¿Qué es un encabezado de tipo de contenido apropiado para los archivos de JavaScript?
- 12. Técnicas para mantener los datos en el caché, localidad?
- 13. SQLite agregar la columna, mantener los datos
- 14. C++ tipo mantener el seguimiento de los índices
- 15. Object.CompareTo (Object) para tipo de datos desconocido
- 16. Mantener los valores seleccionados después del envío del formulario
- 17. ¿Qué tipo de estructura de datos debo usar para mantener las filas de la tabla?
- 18. importancia de los valores negativos de tipo char en C
- 19. NSNumber (entero 16, 32, 64) de los datos básicos que debe utilizar para mantener NSUInteger
- 20. patrones java para mantener constante los índices en los datos en una colección
- 21. swing: Oyente apropiado para JTextField change events
- 22. Tamaño apropiado de heap y antigua generación para JVM para aplicaciones pesadas de datos
- 23. La conversión de los valores de ConfigParser a los tipos de datos de Python
- 24. cómo manejar valores nulos para el tipo de datos SQLDecimal en clases de FileHelper
- 25. ¿Cuál es el tipo de datos más apropiado para almacenar una dirección IP en el servidor SQL?
- 26. ¿Cómo puedo mantener los datos sincronizados durante la implementación?
- 27. [Servidor Sql] ¿qué tipo de datos usar para los valores de sal y hash de la contraseña y qué longitud?
- 28. ¿Cuándo es apropiado usar tipos de datos de precisión flotante?
- 29. ¿Cómo mantener los valores enteros en los controles deslizantes vinculados dinámicamente?
- 30. Devolver diferente tipo de datos según los datos (C++)
También encontraron esta entrada relacionada: http://stackoverflow.com/questions/1602318/what-should-be-the -best-way-to-store-a-percent-value-in-sql-server – User