Pregunta Diferencia entre decimal, flotante y doble en .NET?


Cuál es la diferencia entre decimal, float y double ¿en la red?

¿Cuándo alguien usaría uno de estos?


1772
2018-03-06 11:31


origen


Respuestas:


float y double son flotante binario tipos de puntos. En otras palabras, representan un número como este:

10001.10010110011

El número binario y la ubicación del punto binario están codificados dentro del valor.

decimal es un flotante decimal tipo de punto. En otras palabras, representan un número como este:

12345.65789

De nuevo, el número y la ubicación del decimal ambos puntos están codificados dentro del valor, eso es lo que hace decimal sigue siendo un tipo de punto flotante en lugar de un tipo de punto fijo.

Lo importante a tener en cuenta es que los humanos están acostumbrados a representar números enteros en forma decimal, y esperan resultados exactos en representaciones decimales; no todos los números decimales son exactamente representables en el punto flotante binario - 0.1, por ejemplo - así que si usas un valor binario de coma flotante obtendrás una aproximación a 0.1. Igual obtendrás aproximaciones al usar un punto decimal flotante también; el resultado de dividir 1 por 3 no se puede representar exactamente, por ejemplo.

En cuanto a qué usar cuando:

  • Para valores que son "decimales naturalmente exactos", es bueno usar decimal. Esto generalmente es adecuado para cualquier concepto inventado por humanos: los valores financieros son el ejemplo más obvio, pero también hay otros. Considere la puntuación dada a los buceadores o patinadores sobre hielo, por ejemplo.

  • Para valores que son más artefactos de la naturaleza que realmente no se pueden medir exactamente de todas formas, float/double son mas apropiados Por ejemplo, los datos científicos generalmente se representarían de esta forma. Aquí, los valores originales no serán "decimales" para empezar, por lo que no es importante que los resultados esperados mantengan la "precisión decimal". Los tipos de puntos binarios flotantes son mucho más rápidos de trabajar que los decimales.


1963
2018-03-06 11:56



La precisión es la principal diferencia.

Flotador - 7 dígitos (32 bit)

Doble-15-16 dígitos (64 bit)

Decimal -28-29 dígitos significativos (128 bit)

Los decimales tienen una precisión mucho mayor y se usan generalmente en aplicaciones financieras que requieren un alto grado de precisión. Los decimales son mucho más lentos (hasta 20 veces en algunas pruebas) que un doble / flotante.

Decimales y Flotadores / Dobles no se pueden comparar sin un yeso, mientras que los Flotadores y Dobles sí pueden. Los decimales también permiten la codificación o los ceros finales.

float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);

Resultado:

float: 0.3333333  
double: 0.333333333333333  
decimal: 0.3333333333333333333333333333

894
2018-03-06 11:33



La estructura Decimal está estrictamente orientada a cálculos financieros que requieren precisión, que son relativamente intolerantes al redondeo. Los decimales no son adecuados para aplicaciones científicas, sin embargo, por varias razones:

  • Una cierta pérdida de precisión es aceptable en muchos cálculos científicos debido a los límites prácticos del problema físico o artefacto que se mide. La pérdida de precisión no es aceptable en las finanzas.
  • El decimal es mucho (mucho) más lento que flotante y doble para la mayoría de las operaciones, principalmente porque las operaciones de punto flotante se realizan en binario, mientras que las decimales se hacen en base 10 (es decir, flotantes y dobles manejadas por el hardware FPU, como MMX / SSE , mientras que los decimales se calculan en software).
  • El decimal tiene un rango de valores inaceptablemente menor que el doble, a pesar de que admite más dígitos de precisión. Por lo tanto, Decimal no se puede usar para representar muchos valores científicos.

65
2018-04-13 13:55



enter image description here

para más información puedes ir a la fuente de esta imagen:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5


54
2018-06-07 12:50



float 7 dígitos de precisión

double tiene alrededor de 15 dígitos de precisión

decimal tiene alrededor de 28 dígitos de precisión

Si necesita una mayor precisión, use el doble en lugar de flotar. En las CPU modernas, ambos tipos de datos tienen casi el mismo rendimiento. El único beneficio de usar flotador es que ocupan menos espacio. Prácticamente importa solo si tienes muchos de ellos.

Encontré que esto es interesante. Lo que todo informático debería saber sobre la aritmética de coma flotante


39
2017-08-29 00:06



Nadie ha mencionado eso

En las configuraciones predeterminadas, Floats (System.Single) y double (System.Double) nunca usarán   verificación de desbordamiento mientras Decimal (System.Decimal) siempre usará   control de desbordamiento

quiero decir

decimal myNumber = decimal.MaxValue;
myNumber += 1;

tiros OverflowException.

Pero estos no:

float myNumber = float.MaxValue;
myNumber += 1;

&

double myNumber = double.MaxValue;
myNumber += 1;

28
2018-01-02 13:12



  1. El doble y el flotante se pueden dividir por cero entero sin una excepción tanto en la compilación como en el tiempo de ejecución.
  2. El decimal no se puede dividir por entero cero. La compilación siempre fallará si haces eso.

24
2017-07-29 07:21



No voy a reiterar toneladas de información buena (y mala) ya respondida en otras respuestas y comentarios, pero responderé a su pregunta de seguimiento con un consejo:

¿Cuándo alguien usaría uno de estos?

Use decimal para contado valores

Use flotador / doble para mesurado valores

Algunos ejemplos:

  • dinero (¿contamos dinero o medimos dinero?)

  • distancia (¿contamos la distancia o medimos la distancia? *)

  • puntajes (¿contamos puntajes o medimos puntajes?)

Siempre contamos dinero y nunca debemos medirlo. Usualmente medimos la distancia. A menudo contamos puntajes.

* En algunos casos, lo que yo llamaría distancia nominal, de hecho, podemos querer 'contar' la distancia. Por ejemplo, tal vez estamos tratando con señales de países que muestran las distancias a las ciudades, y sabemos que esas distancias nunca tienen más de un dígito decimal (xxx.x km).


24
2018-04-22 15:18



Los tipos de variable Decimal, Doble y Float son diferentes en la forma en que almacenan los valores. La precisión es la principal diferencia donde float es un tipo de datos de coma flotante de precisión simple (32 bits), double es un tipo de datos de coma flotante de doble precisión (64 bits) y decimal es un tipo de datos de coma flotante de 128 bits.

Flotante: 32 bits (7 dígitos)

Doble - 64 bit (15-16 dígitos)

Decimal - 128 bit (28-29 dígitos significativos)

La diferencia principal es que los flotantes y los dobles son tipos de coma flotante binarios y un decimal almacenará el valor como un tipo de punto decimal flotante. Por lo tanto, los decimales tienen una precisión mucho mayor y se usan generalmente en aplicaciones de cálculo monetario (financiero) o científico que requieren un alto grado de precisión. Pero en términos de rendimiento, los decimales son más lentos que los tipos dobles y flotantes.

El decimal puede representar 100% con precisión cualquier número dentro de la precisión del formato decimal, mientras que Float y Double no pueden representar con precisión todos los números, incluso los números que están dentro de sus respectivos formatos de precisión.

Decimal

En el caso de aplicaciones financieras o cálculos científicos, es mejor utilizar tipos de Decimal porque le proporciona un alto nivel de precisión y es fácil evitar los errores de redondeo.

Doble

Los tipos dobles son probablemente el tipo de datos más utilizado para valores reales, excepto el manejo de dinero.

Flotador

Se usa principalmente en bibliotecas gráficas debido a las altas demandas de potencia de procesamiento, también se usan situaciones que pueden soportar errores de redondeo.


23
2018-06-19 04:34