2011-12-28 18 views
5

Tengo que representar los números en mi base de datos, que son cantidades de sustancias químicas en los alimentos, como las grasas, la energía, el magnesio y otros. Estos valores son decimales en formato 12345.67.¿Cuál es el tipo de datos correcto que debo usar en este caso?

Si uso decimal (5,2) como tipo de datos en SQL Server, se correlaciona con Decimal en Entity Framework. Si uso float como tipo de datos en SQL Server, se correlaciona con Double en Entity Framework.

No estoy seguro de cuál debería ser el mejor tipo de datos en SQL Server, o realmente no importa mucho?

EDITAR - en mi caso debería ser decimal(7,2), como se menciona en algunas de las observaciones!

Gracias.

+3

'DECIMAL' se prefiere típicamente - no es plagado de errores de redondeo como' FLOAT' –

+2

Consulte http://stackoverflow.com/questions/618535/what-is-the-difference-between-decim al-float-and-double-in-c – gsharp

+0

si quiere precisión y tiene un número finito de valores esperados después del decimal, use decimal si no le importa el uso de precisión float. busque en decimal vs flotante para ver las razones por qué. – xQbert

Respuesta

10

Necesitas decimal(7,2)

  • 7 es el número total de dígitos
  • 2 es después del punto decimal

Diferencias:

  • flotador está aproximado y dará resultados inesperados
  • decimal es exactas

Referencias:

+0

Gracias. Leí que Decimal es el tipo más preciso, pero si uso Decimal (7,2), ¿significa que no se necesita mucho almacenamiento en el servidor sql? En ese caso, también leí que Decimal es el más lento para trabajar en .NET, ¿puede convertirse en un problema si necesito estos números en los cálculos? –

+1

@Lud: decimal (7,2) requiere 9 bytes de almacenamiento. Float tiene 8 bytes. No hay mucha diferencia dada la precisión. No me preocuparía el rendimiento en .net a menos que tenga grandes cantidades de datos. Incluso entonces, el manejo de .net en matemáticas del doble es mucho mejor que SQL Server, por lo que puede almacenar decimal en la base de datos, pero puede procesar double in.net si es necesario – gbn

+0

@Cicada, no entiendo su comentario ... es una aplicación de negocios, asi que..? –

4

DECIMAL(7,2) sería mejor que flotar, es exactamente lo que necesita (5 + 2 dígitos). Con tipos flotantes (por ejemplo, flotante, doble), es posible que tenga algunos problemas, p. con redondeo.

+0

En realidad: 'DECIMAL (5,2)' significa: 5 dígitos ** en total ** - dos de los cuales después del punto decimal - entonces realmente son 3 + 2 dígitos (** NO ** 5 + 2)! –

+0

Ok, ¿no causaría esto problemas de rendimiento en los cálculos cuando leo que el decimal es el tipo más lento en .NET? –

+0

DECIMAL (5,2) solo puede almacenar en un máximo de 999.99, tiene 5 dígitos en total con una escala de dos decimales (http://msdn.microsoft.com/en-us/library/ms187746.aspx) –

Cuestiones relacionadas