2009-06-30 64 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,至少爲正確雙打將允許給予其侷限性但就中越別處討論,幾乎無休止地:-)。