Perdoe-me se esta é uma pergunta ingênua, mas estou perdida hoje.
Eu tenho um cálculo de divisão simples, como a seguir:
double returnValue = (myObject.Value / 10);
Valor é um int no objeto.
Estou recebendo uma mensagem que diz Possível perda de fração. No entanto, quando altero o dobro para um int, a mensagem desaparece.
Alguma idéia de por que isso aconteceria?
Respostas:
Quando você divide dois int em um valor de ponto flutuante, a parte da fração é perdida. Se você converter um dos itens para um flutuador, não receberá esse erro.
Por exemplo, transforme 10 em uma 10.0
fonte
Você está fazendo divisão inteira se
myObject.Value
for um int, pois os dois lados do/
são do tipo inteiro.Para fazer a divisão de ponto flutuante, um dos números na expressão deve ser do tipo de ponto flutuante. Isso seria verdade se myObject.Value fosse duplo ou qualquer um dos seguintes:
fonte
Um número inteiro dividido por um número inteiro retornará um número inteiro. Converta Valor para um dobro ou divida por 10,0.
fonte
Supondo que
myObject.Value
seja umint
, a equaçãomyObject.Value / 10
será uma divisão inteira que será convertida em um dobro.Isso significa que myObject.Value sendo 12 resultará em returnValue se tornando 1, e não 1.2.
Você precisa converter os valores primeiro:
Isso resultaria no valor correto 1.2, pelo menos o mais correto possível, dadas as limitações, mas isso é discutido em outro lugar no SO, quase infinitamente :-).
fonte
Eu acho que desde que myObject é um int, você deveria
fonte