Perdóname si esta es una pregunta ingenua, sin embargo, hoy estoy perdido.
Tengo un cálculo de división simple como sigue:
double returnValue = (myObject.Value / 10);
El valor es un int en el objeto.
Recibo un mensaje que dice Posible pérdida de fracción. Sin embargo, cuando cambio el doble a un int, el mensaje desaparece.
¿Alguna idea sobre por qué sucedería esto?
Respuestas:
Cuando divide dos enteros en un valor de punto flotante, la fracción se pierde. Si lanza uno de los elementos a un flotador, no obtendrá este error.
Entonces, por ejemplo, convierta 10 en 10.0
fuente
Está haciendo una división de enteros si
myObject.Value
es un int, ya que ambos lados del/
son de tipo entero.Para hacer una división de punto flotante, uno de los números de la expresión debe ser de tipo punto flotante. Eso sería cierto si myObject.Value fuera un doble, o cualquiera de los siguientes:
fuente
Un número entero dividido por un número entero devolverá un número entero. Convierte Value en un doble o divide por 10.0.
fuente
Suponiendo que
myObject.Value
es anint
, la ecuaciónmyObject.Value / 10
será una división entera que luego se convertirá en un doble.Eso significa que myObject.Value siendo 12 dará como resultado que returnValue se convierta en 1, no 1.2.
Primero debes emitir los valores:
Esto daría como resultado el valor correcto 1.2, al menos tan correcto como lo permitan los dobles dadas sus limitaciones, pero eso se discute en otra parte de SO, casi infinitamente :-).
fuente
Creo que como myObject es un int, deberías
fuente