2009-06-30 53 views
100

如果这是一个天真的问题,请原谅我,但我今天处于亏损状态。分数的可能损失

我有一个简单除法计算例如如下:

double returnValue = (myObject.Value/10); 

值是在对象的int。

我收到一条消息,说可能损失的分数。但是,当我将double改为int时,消息就消失了。

有关为什么会发生这种情况的任何想法?

+0

谢谢大家的好评。现在在分割2个int值时丢失小数点是有意义的。 – CodeLikeBeaker 2009-06-30 01:30:28

回答

138

当你把两个int的成浮点值的小数部分丢失。如果您将其中一个项目转换为浮动,您将不会收到此错误。

因此,例如把10到10.0

double returnValue = (myObject.Value/10.0); 
3

我想既然myObject的是一个int,你应该

double returnValue=(myObject.Value/10.0); 
51

你做的整数除法如果myObject.Value是int,因为/两边都是整型。

要进行浮点除法,表达式中的其中一个数字必须是浮点类型。如果myObject.Value是一个双,或以下任何这将是正确的:

double returnValue = myObject.Value/10.0; 
double returnValue = myObject.Value/10d; //"d" is the double suffix 
double returnValue = (double)myObject.Value/10; 
double returnValue = myObject.Value/(double)10; 
6

的整数除以整数将返回你的一个整数。将其中的任意一个值赋值为double或者除以10.0。

6

假设myObject.Valueint,等式myObject.Value/10将是一个整数除法,然后将其转换为double。

这意味着myObject.Value为12会导致returnValue变为1,而不是 1.2。

你需要转换值(S)第一:

double returnValue = (double)(myObject.Value)/10.0; 

这将导致正确值1.2,至少为正确双打将允许给予其局限性但就中越别处讨论,几乎无休止地:-)。