¿Cómo puedo verificar si 204/5 es mayor que 200/5? Experimenté dificultad cuando intenté esto, usando matemáticas de punto flotante y decimal.Problemas con la división en C#
Respuesta
Al añadir un .0
o un f
a cualquier número fuerza el lenguaje para interpretar ese número como un número decimal de coma flotante:
204
es un entero,204f
es una precisión simple decimal en coma flotante y204.0
es un decimal de coma flotante de doble precisión.
Por lo tanto, 204/5
devuelve un entero 40
y 204.0/5
devuelve un flotador de doble precisión 40.8
.
if (204.0/5 > 200.0/5) {
// stuff
}
O bien, puede tomar la ruta matemáticamente más simple:
if (204 > 200) {
// because you're dividing both of them by 5
}
CPU no refundición. Simplemente le dice al compilador qué tipo de código general tratar con los números (como enteros, flotantes, dobles, etc.) – siride
@siride - Absolutamente correcto. Editado – amphetamachine
if ((204.0/5.0) > (200.0/5.0)) {
//do stuff!
}
Usando flotante o decimal hará el trabajo ... pero lo que necesita para llevar a cabo la aritmética en la flotación señalar haciendo al menos uno de los operandos decimal/flotante/doble:
decimal x = ((decimal) 204)/5;
decimal y = ((decimal) 200)/5;
if (x > y) // Yes!
o el uso de puntos flotantes literales:
decimal x = 204m/5;
decimal y = 200m/5;
No importa lo que operando está flotando punto:
decimal x = 204/5m;
decimal y = 200/5m;
flotador trabajo/doble igual de bien:
double x = 204d/5;
double y = 200d/5;
Entonces, ¿qué sucede si solo usas 204/5? Así, tenga en cuenta esta declaración:
double x = 204/5;
El compilador no utiliza el tipo de la variable para calcular el tipo de la derecha. Funciona que el lado derecho es solo un entero, obtenido al dividir dos enteros. El resultado se convierte luego en double
y se asigna a x
. El problema es que la aritmética se hace puramente con enteros mientras que desea que la conversión a punto flotante se realice antes, para que pueda obtener un resultado de coma flotante.
La razón es que cuando intenta calcular 204/5
, está calculando exactamente int 204 divides int 5
, el resultado es también int
en C#. Puedes probar 204m/5
, obtendrás la respuesta correcta.
if (((float)(204)/5) > ((float)(200)/5))
{
//Enter code here
}
else
{
//Enter code here
}
- 1. Java, BigDecimal. Problemas con la división
- 2. División doble en C
- 3. Problemas con cadenas en C
- 4. C++ - tipo de la división?
- 5. /euclidiana número entero división de la división
- 6. División de matrices en C++
- 7. División de cadenas en C++
- 8. Problemas con interfaz de flujo en C++
- 9. Solución de problemas en C++ con STL
- 10. Posibles problemas con NOMINMAX en Visual C++
- 11. Tengo problemas con C++ 11 en Xcode
- 12. Problemas con la función de clase parcial anula en C++
- 13. Redondeo de división entera con negativos en C++
- 14. División de enteros en C++ 11
- 15. Problemas con la ampliación API
- 16. C división entera y piso
- 17. C# problema de división sencilla
- 18. Problemas con GKSession - Objective-C GameKit
- 19. Objetivo-c: Problemas con bloques y NSEnumerationConcurrent
- 20. Problemas con CMake y Visual C++ 2010
- 21. División en la primera aparición
- 22. La división entera en Python
- 23. cadena de la división en grupos
- 24. problemas con la función strtolower
- 25. Problemas con la aplicación web
- 26. Grails Problemas con la transacción
- 27. Buffers de protocolo, obtener C# para hablar con C++: escribir problemas y problemas de esquema
- 28. Problemas con la línea nueva en Graphics2D.drawString
- 29. Problemas con la captura en PowerShell
- 30. División JSplitPane 50% con precisión
(float) 200/(float) 5 <(float) 204/(float) 5 – FFox