Estoy pensando en carrozas. Para el registro, también estoy usando NHibernate.¿Qué tipos debo usar para representar porcentajes en C# y SQL Server?
Respuesta
decimal
No perderá precisión debido al redondeo.
Depende de la precisión que necesite. Si no necesita decimales, incluso podría usar tiny int. Pero generalmente los flotadores son buenos si necesitas algunos decimales. Yo uso LLBLGen y flotadores para% 's
Depende de para qué los uses.
si se trata de una pantalla, un int podría funcionar bien y ser más rápido que un flotador. Si se trata de matemáticas infrecuentes, un int todavía sería bueno (o incluso un corto, en cualquier caso).
Si está haciendo un montón de matemáticas, entonces una flotación probablemente sea la mejor, en cuanto a rendimiento.
Por supuesto, a menos que esté haciendo MUCHA manipulaciones de los porcentajes, en realidad no importará al final, en cuanto a rendimiento, dada la velocidad del procesador moderno.
EDITAR: Por supuesto, 'int' asume que solo está usando porcentajes estrictos de números enteros. Si no lo eres, SIEMPRE serías mejor con float o dec.
La pregunta no fue acerca de int vs float ... También dice que los ints son más rápidos, pero también dicen que los flotantes son mejores para el rendimiento. –
@StuartBranham: Y si lo nota, di las situaciones en las que ambas son ciertas. Y un porcentaje se puede almacenar como int (75, lo que significa 75%) o float (.75 representa 75%, o 75.5 significa 75.5%, o .755 significa 75.5%). Para un simple almacenamiento y visualización, un int es más rápido. Si necesita trabajar con los números, lo mejor es un flotador: puede almacenar lugares decimales y funciones matemáticas integradas que lo hacen muy eficiente. – Jeff
Con respecto a SQL Server, es raro que almaceno un porcentaje. 9 veces de cada 10, desea almacenar los datos que se utilizan para derivar el porcentaje y calcular según sea necesario.
Si y solo si tiene datos empíricos que muestran que el cálculo es demasiado lento, entonces guárdelo. Use un decimal como se sugirió anteriormente para evitar problemas de redondeo.
esto podría ser específico del dominio. Muchas veces no tendrá los datos que calcule el porcentaje, como que un usuario ingrese el% de un color para usar – mattlant
Como dijo @mattlant, los porcentajes que necesito almacenar son porcentajes de dominio como el 17,5% de IVA y el 40% de descuento etc. –
En gran medida depende de la precisión que necesite; Lo más importante es ser consistente y claro. Tome precauciones para asegurarse de que sea coherente en todo el uso del campo ... es decir, no lo almacene como un flotador (n = .5) y luego intente reconstituirlo como si fuera un número entero en otra parte de su código (mipercentaje = n/100). Siempre que se asegure de no hacer eso y no esté construyendo un láser que requiera 30 dígitos significativos de precisión, simplemente escoja su sabor favorito entre int, doble o lo que sea float s su bote. Waka Waka.
La respuesta depende de la aplicación.
Otros han señalado que el decimal es mejor que el flotante para representar un valor exacto. Pero a veces es mejor utilizar un flotador para aumentar la precisión (por ejemplo, un conjunto de pesos calculados que suman 100% probablemente esté mejor representado como un flotador)
- 1. ¿Qué es una página en SQL Server y debo preocuparme?
- 2. ¿Cómo debo usar Redis como caché para SQL Server?
- 3. ¿Qué permiso necesito para usar SqlBulkCopy en SQL Server 2008?
- 4. Cómo debo usar BIT en SQL Server 2005
- 5. Qué tipo de datos de SQL Server debo usar para almacenar un byte []
- 6. ¿Qué DB debo usar?
- 7. ¿Cómo pivotar y calcular porcentajes en t-sql?
- 8. ¿Cuándo debo usar los bloques Begin/End y la palabra clave Go en SQL Server?
- 9. SQL Server identificador único equivalente en C#
- 10. ¿Cuál es la forma correcta de representar y manipular probabilidades y porcentajes en Java?
- 11. Crystal Reports, qué proveedor OLEDB usar para SQL Server
- 12. ¿Debo usar FxCop y por qué?
- 13. ¿Por qué no debo usar siempre tipos que aceptan valores de nulo en C#
- 14. SQL Server 2005 UniqueIdentifier y C# Data Type
- 15. Escriba "Tiempo" en SQL Server y C#
- 16. ¿Qué debo instalar para usar OraOLEDB
- 17. ¿Qué enfoque debo usar para el script de C#?
- 18. Buena referencia para SQL para usar con SQL Server 2008
- 19. ¿Debo usar un bloque try..catch y una reversión explícita en un procedimiento de SQL Server?
- 20. ¿Qué debo #incluir para usar 'htonl'?
- 21. Cambiando de usar SQL Server Express a SQL Server Compact
- 22. ¿Qué biblioteca C++ debo usar para implementar un cliente HTTP?
- 23. En SQL Server, ¿cuándo debería usar GO y cuándo debería usar punto y coma?
- 24. ¿Qué son los tipos de datos C# equivalentes para la fecha, hora y fecha de salida de SQL Server?
- 25. Cuándo usar Transacciones en SQL Server
- 26. Cuándo debo abrir y cerrar una conexión a SQL Server
- 27. ¿Qué controlador mongo para nodo debo usar?
- 28. ¿Qué idiomas y bibliotecas debo usar para trabajar con Gmail?
- 29. Qué opción seleccionar para usar sql en C++
- 30. ¿Qué metainformaciones debo usar?
Al encontrar esta pregunta más adelante, encontré esta respuesta más útil WRT Parte de la pregunta de SQL Server: http://stackoverflow.com/questions/158966/what-types-should-i-use-to-represent-percentages-in-c-and-sql-server/159780#159780. Parecería que la respuesta es decimal como CLR y flotante para el tipo de SQL Server, al menos si es probable que almacene porcentajes fraccionarios. –