Soy principiante en C# y estoy trabajando con números de coma flotante. Necesito hacer una resta entre estos dos números, pero no funciona. Sé que es causado por un número de coma flotante, pero ¿cómo puedo arreglarlo? Y si eres tan bueno, ¿puedes explicarme por qué está sucediendo? Gracias por adelantado.C# resta incorrecta? 12.345 - 12 = 0.345000000000001
Respuesta
considerar el uso de decimales en lugar de float:
// Instead of this...
float a = 12.345F;
float b = 12;
float c = a - b;
// Use this:
decimal d = 12.345M;
decimal e = 12;
decimal f = d - e;
Jon Skeet da una buena explicación de las diferencias entre los dos tipos en esta respuesta: https://stackoverflow.com/a/618596/446681
+1: si necesita algún tipo de fidelidad numérica, 'decimal' es el camino a seguir. – code4life
Decimal es lo que estaba buscando, muchas gracias. Quiero agradecer también a las personas que explicaron por qué estaba sucediendo. – c0ntrol
Depende de para qué sirven los números. Siempre debe usar 'decimal' por dinero. Pero * no * para simulaciones de física. – dan04
¿Cómo está calculando exactamente?
float a = 12.35F;
float b = 12.0F;
float ans = a - b; //0.350000381
double x = 12.35;
double y = 12.0;
double ans2 = x - y; //0.34999999999999964
decimal n = 12.35m;
decimal m = 12.0m;
decimal ans3 = n - m; //0.35
Para mí estos cálculos dan los resultados correctos.
Gracias por el decimal . – c0ntrol
Dependiendo de lo que se puede utilizar cualquier tipo decimal, o guárdelo como está, pero redondee antes de mostrar la respuesta
Este no es un problema de ac, este es un problema de ciencias de la computación. Si quiere entender realmente lo que está sucediendo, lea What Every Computer Scientist Should Know About Floating-Point Arithmetic. Si simplemente te importa por qué estás teniendo el problema, es porque Float y Double solo tienen una precisión de 7 y 15 dígitos respectivamente en esta plataforma, y necesitas aplicar la lógica de redondeo para lograr el resultado que estás buscando.
Exprimir infinitamente muchos números reales en un número finito de bits requiere una representación aproximada. Aunque hay infinitos números enteros en , en la mayoría de los programas el resultado de los cálculos enteros puede almacenarse en 32 bits en . Por el contrario, dado un número fijo de bits, la mayoría de los cálculos con números reales producirán cantidades que no se pueden representar exactamente utilizando tantos bits. Por lo tanto, el resultado de un cálculo de punto flotante a menudo debe redondearse en el orden para volver a su representación finita. Este error de redondeo es la característica característica del cálculo de coma flotante. Goldberg 1991
Gracias por la explicación. – c0ntrol
- 1. resta resta de conjunto
- 2. El valor de resta de dirección siempre es 12? ¿El tamaño de las variables es leve?
- 3. Proyecto Euler Problema 12 - C++
- 4. Resta de fondo en OpenCV (C++)
- 5. NSDecimalNumber resta
- 6. puntero Además vs resta
- 7. C# HttpListener 'solicitud incorrecta' problema
- 8. Convertir C Unión a C# (alineadas de forma incorrecta)
- 9. ¿Resta sin desbordamiento?
- 10. javascript date resta
- 11. fechas resta con Rubí
- 12. Resta entre dos consultas sql
- 13. Resta de fecha en JavaScript
- 14. Perl Datetime problema de resta
- 15. C resultado de suma incorrecta con dobles
- 16. C#, sp_executesql y la sintaxis incorrecta
- 17. valores de matriz de resta de PHP
- 18. PKCS # 12: DerInputStream.getLength() excepción
- 19. ¿Hay un equivalente de rango de pitones (12) en C#?
- 20. ¿Cómo usar el número de 12 dígitos en C?
- 21. MySql Resta una tabla de otra
- 22. matriz Numpy 2D Resta por fila
- 23. Suma y resta de fechas en Java
- 24. resta minutos de un valor de tiempo
- 25. simple error de la resta en Javascript
- 26. Resta no funciona en brújula scss
- 27. resta entera con envoltura para N bits
- 28. resta de variable en plantillas django
- 29. Eclipse no compilará, archivo de clase incorrecta, versión incorrecta
- 30. NSLog codificación incorrecta
¿Qué quiere y cuál es su problema, por favor elabore su pregunta ...? –
Publica tu código por favor. ¿Todas las variables flotan? – c0d3Junk13
¿Se puede publicar el código? El cálculo en su tema se ve muy extraño. El redondeo normal de punto flotante no causa tal comportamiento. – CodesInChaos