tipo precio para money moneda entre diferencia dato c# sql tsql currency

precio - tipo de dato para moneda en c#



¿Cuál es la mejor manera de almacenar un valor monetario en la base de datos? (7)

Necesito almacenar un par de campos relacionados con el dinero en la base de datos, pero no estoy seguro de qué tipo de datos usar entre dinero y decimal .


¡¡¡Depende de su aplicación!!! Trabajo en servicios financieros donde normalmente consideramos que el precio es significativo a 5 decimales después del punto, que por supuesto cuando compra un par de millones a 3.12345 peniques / centavos es una cantidad significativa. Algunas aplicaciones suministrarán su propio tipo de sql para manejar esto.

Por otro lado, esto podría no ser necesario. <Humour> Las tarifas de los contratistas siempre parecían estar redondeadas a las £ 100 más cercanas, pero actualmente parecen estar a las £ 25 libras más cercanas en la crisis crediticia actual. </Humour>


El decimal y el dinero deberían ser bastante confiables. ¡Lo que puedo asegurarle (de la experiencia personal dolorosa de las aplicaciones heredadas) es NO usar float!


No alinee sus pensamientos en base a los tipos de datos disponibles. Más bien, analice su requerimiento y luego vea qué tipo de datos se ajusta mejor. Flotante es siempre la peor opción, considerando la limitación de la arquitectura en el almacenamiento de versiones binarias de números de punto flotante. El dinero es una unidad estándar y seguramente tendrá más apoyo para manejar las operaciones relacionadas con el dinero. En el caso del decimal, tendrás que manejar cada uno y todo, pero sabes que solo eres tú quien maneja un tipo decimal, por lo que no hay sorpresas que puedas obtener con otros dos tipos de datos.


Para algunos datos (como el dinero) en los que no desea aproximaciones o cambios debido al valor flotante, debe asegurarse de que los datos nunca estén ''flotando'', debe ser rígido en ambos lados del punto decimal.
Una forma fácil de estar seguro es valorarlo convirtiéndolo en un tipo de datos INTEGER y asegúrese de que mientras recupera el valor, el punto decimal se coloca en la ubicación correcta.
p.ej
1. Para guardar $ 240.10 en la base de datos.
2. Conviértalo a una forma integral pura: 24010 (usted sabe que es solo el cambio de decimal).
3. Revertirlo al estado decimal apropiado. Coloca el decimal en 2 posiciones desde la derecha. $ 240.10

Por lo tanto, mientras esté en la base de datos estará en una forma de entero rígido.


Use decimales y más decimales de los que cree que necesitará para que las correcciones sean correctas. El dinero no siempre devuelve resultados correctos en los cálculos. Bajo ninguna circunstancia use float o real ya que estos son tipos de datos inexactos y pueden hacer que los cálculos sean incorrectos (especialmente a medida que se vuelven más complejos).


Yo siempre uso decimal; Nunca usé DINERO antes.

Recientemente, encontré un artículo sobre el tipo de datos decimales frente al dinero en el servidor Sql que podría encontrar interesante:

Dinero vs decimal

También parece que el tipo de datos de dinero no siempre resulta en resultados precisos cuando realiza cálculos con él: click

Lo que he hecho tan bien en el pasado, es utilizar un campo INT y almacenar la cantidad en centavos (eurocent / dollarcent).


Supongo que todo se reduce a precisión y escala. IIRC, el money es 4dp. Si eso está bien, el money expresa tu intención. Si desea más control, use decimal con una precisión y escala específicas.