2013-08-07 57 views

回答

4

從雙總是詮釋鑄造需要在地板上,因此添加0.5(或減去0.5,如果它是負的)指1.6返回2,而1.4將返回1.

1

對於大於0的數字,它會加0.5和截斷。對於數字< 0,它減去0.5並截斷。

(int)其實施截斷,所以(int)7.8 == 7,(int)-7.8 == 7,(int)7.995 == 7等等。

因此,我們有:

0-0.499999... is rounded to 0 (0.499999 + 0.5 == 0.999999 trucated == 0) 
0.5-1... is rounded to 1 (1 + 0.5 == 1.5 truncated == 1) 

等。

負數相反。

邊界的情況下(在int.MinValue - int.MaxValue範圍以外的值)可能會被忽略,所以是Double特殊值(NaNPositiveInfinityNegativeInfinity

可能有一些問題,一些double數字,因爲double不是「精確「(解釋起來很複雜,試着尋找雙重差的原因),而且你經常看到的不是你所擁有的東西,所以你可以有一些你認爲是1.5的東西,但實際上是1.499999999999985,所以它被舍入爲1而不是2 。

類似於:

double d = 11.3; 

// There are 20x += 0.01 
d += 0.01; d += 0.01; d += 0.01; d += 0.01; d += 0.01; 
d += 0.01; d += 0.01; d += 0.01; d += 0.01; d += 0.01; 
d += 0.01; d += 0.01; d += 0.01; d += 0.01; d += 0.01; 
d += 0.01; d += 0.01; d += 0.01; d += 0.01; d += 0.01; 

Console.WriteLine("{0}", d); 
Console.WriteLine("{0:R}", d); 
Console.WriteLine("{0}", DoubleToInt(d)); 

結果:

11.5 
11.499999999999996 
11 
0

這只是因爲它轉換(int)。 +或 - 僅用於對值進行舍入。

相關問題