decimal vs doble! - ¿Cuál debo usar y cuándo? [duplicar]

Resuelto Soni Ali asked hace 15 años • 7 respuestas

Sigo viendo gente usando dobles en C#. Sé que leí en alguna parte que los dobles a veces pierden precisión. Mi pregunta es ¿cuándo debo usar un tipo doble y cuándo debo usar un tipo decimal? ¿Qué tipo es adecuado para cálculos monetarios? (es decir, más de $100 millones)

Soni Ali avatar Jul 22 '09 21:07 Soni Ali
Aceptado

Por dinero, siempre decimal. Por eso fue creado.

Si los números deben sumar correctamente o equilibrarse, utilice decimal. Esto incluye cualquier almacenamiento financiero o cálculos, puntuaciones u otros números que las personas puedan hacer a mano.

Si el valor exacto de los números no es importante, utilice el doble para mayor velocidad. Esto incluye gráficos, física u otros cálculos de ciencias físicas donde ya existe un "número de dígitos significativos".

David avatar Jul 22 '2009 14:07 David

Mi pregunta es ¿cuándo debo usar un tipo doble y cuándo debo usar un tipo decimal?

decimalpara cuando trabaja con valores en el rango de 10^(+/-28) y donde tiene expectativas sobre el comportamiento basadas en representaciones de base 10, básicamente dinero.

doublepara cuando necesita precisión relativa (es decir, perder precisión en los dígitos finales en valores grandes no es un problema) en magnitudes muy diferentes: doublecubre más de 10 ^ (+/- 300). Los cálculos científicos son el mejor ejemplo aquí.

¿Qué tipo es adecuado para cálculos monetarios?

decimal, decimal , decimal

No acepte sustitutos.

El factor más importante es que double, al implementarse como una fracción binaria, no puede representar con precisión muchas fraccionesdecimal (como 0,1) y su número total de dígitos es menor ya que tiene 64 bits de ancho frente a los 128 bits de . Por último, las aplicaciones financieras a menudo tienen que seguir modos de redondeo específicos (a veces exigidos por ley). los apoya ; no es.decimaldecimal double

Michael Borgwardt avatar Jul 22 '2009 15:07 Michael Borgwardt

Según las características de los tipos de punto flotante :

Tipo .NET Palabra clave C# Precisión
System.Single flotar ~6-9 dígitos
System.Double doble ~15-17 dígitos
System.Decimal decimal 28-29 dígitos

La forma en que me ha picado el uso del tipo incorrecto (hace unos cuantos años) es con grandes cantidades:

  • 520.532,52 £ - 8 dígitos
  • £1.323.523,12 - 9 dígitos

Te quedas sin 1 millón por un flotador.

Un valor monetario de 15 dígitos:

  • £1.234.567.890.123,45

9 billones con un doble. Pero con la división y las comparaciones es más complicado (definitivamente no soy un experto en punto flotante y números irracionales; consulte el punto de Marc ). Mezclar decimales y dobles causa problemas:

Es posible que una operación matemática o de comparación que utilice un número de punto flotante no produzca el mismo resultado si se utiliza un número decimal porque es posible que el número de punto flotante no se aproxime exactamente al número decimal.

¿Cuándo debo usar doble en lugar de decimal? tiene algunas respuestas similares y más detalladas.

Usar doubleen lugar de decimal para aplicaciones monetarias es una microoptimización; esa es la forma más sencilla en que lo veo.

Chris S avatar Feb 04 '2010 12:02 Chris S