888 votos

decimal vs double! - ¿Cual usar y cuando?

Sigo viendo que la gente usa dobles en C#. Yo sé que leí en alguna parte que los double a veces perde precisión. Mi pregunta es ¿cuándo se debe usar un doble y cuándo se debe utilizar un tipo decimal? ¿que tipo es apropiado para cálculos de dinero? (ej. más de 100 millones de dólares)

1046voto

David Puntos 12145

Para dinero, siempre decimal. Es por eso que fue creado.

Si los números deben sumar correctamente o sacar balances, usa decimales. Esto incluye cualquier almacenamiento o cálculos financieros, puntuaciones, u otros números que la gente pueda hacer a mano.

Si el valor exacto de los números no es importante, utiliza el doble por velocidad. Esto incluye gráficos, física u otras cálculos de ciencias físicas donde ya hay un "número de dígitos significativo".

181voto

Michael Borgwardt Puntos 181658

Mi pregunta es cuándo se debe utilizar un tipo doble y cuándo debo usar un decimal?

decimal para cuando se trabaja con valores en el rango de 10^(+/-28) y donde se tienen expectativas sobre el comportamiento basado en la base 10 de las representaciones -, básicamente de dinero.

double para cuando se necesita relativa exactitud (es decir. perder la precisión en los dígitos finales en los grandes valores no es un problema) a través salvajemente diferentes magnitudes - double cubre más de 10^(+/-300). Cálculos científicos son el mejor ejemplo aquí.

el que tipo es apropiado para el dinero los cálculos?

decimal, decimal, decimales

No acepte imitaciones.

El factor más importante es que double, siendo ejecutado como un binario fracción, no se puede representar con precisión muchos decimal fracciones (como 0.1) en todos y su número total de dígitos es más pequeño ya que es de 64 bits de ancho vs. 128-bit para decimal. Finalmente, las aplicaciones financieras a menudo tienen que seguir ciertos modos de redondeo (a veces obligados por la ley). decimal compatible con estos; double no.

40voto

Chris S Puntos 32376

System.Single / float - 7 dígitos
System.Double / doble - 15-16 dígitos
System.Decimal / decimal - 28 y 29 de cifras significativas

La manera en la que he sido picado por el uso de un tipo erróneo de un buen par de años con grandes cantidades:

  • £520,532 .52 - 7 dígitos
  • £1,323,523 .12 - 8 dígitos

Ejecutar en 1 millón por un flotador.

Un 15 dígitos valor monetario:

  • £1,234,567,890,123 .45

9 billones de dólares con un doble. Pero, con la división y comparaciones es más complicado (definitivamente soy ningún experto en punto flotante y los números irracionales - Marc punto). La mezcla de decimales y dobles provoca problemas:

Una operación matemática o de comparación que utiliza un número de punto flotante puede no producir el mismo resultado si un número decimal se utiliza debido a que el número de punto flotante puede que no exactamente aproximado de la coma decimal número.

Cuándo se debe utilizar doble en lugar de decimal? tiene algunas similares y más en la profundidad de las respuestas.

Utilizando double en lugar de decimal para usos de dinero es un micro-optimización - que la más simple es la forma en que me mira.

36voto

Ian Boyd Puntos 50743

Decimal es para valores exactos. Doble para valores aproximados.

USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)

27voto

Clement Herreman Puntos 5642

Para el dinero: decimal. Cuesta un poco más de memoria, pero no tiene problemas de redondeo como double a veces.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X