2010-09-01 68 views
18

我正在做一個計算值和在調試時,我發現這個:1/252 = 0在C#中?

double num = 1/252; 

當我調試此,NUM被設置爲零(0)。是否有一個原因?我想將其作爲實際計算。

由於

+17

也就是說喬恩斯基特誰回答你的問題。去展示給你所有的朋友。我會。 :) – 2010-09-01 20:00:03

+0

可能的重複[在C#中的分區不按我期望的方式](http://stackoverflow.com/questions/2400799/division-in-c-not-going-the-way-i-expect) – 2010-09-03 17:44:42

回答

30

是 - 該計算是在整數算術正在執行。試試這個:

double num = 1.0/252.0; 

基本上,結果被分配給的變量的類型不影響正在執行的算術運算。一個整數除以另一個整數的結果是一個整數;如果要使用浮點運算,則需要使其中一個或另一個操作數爲浮點類型。最簡單的方法就是在文字上加上「.0」。另一種方法是使用d後綴:

double num = 1d/252d; 

請注意,你只有真正需要做一個操作數爲它工作浮點值,但爲了清楚起見,在這種情況下,我可能會做兩個。

這很簡單,當然是有文字的事,但對於其他表達式(變量,方法調用等)的結果,你會需要使用強制:

int x = 1; 
int y = 252; 
double num = (double) x/(double) y; 

同樣,你只需要投其中之一,所以這也可以工作:

int x = 1; 
int y = 252; 
double num = (double) x/y; 

請注意,這不是特定於除法 - 它也會影響其他算術運算符。

+6

或,如果你有整數變量,則將其中的一個轉換爲double:(double)a/b。 – 2010-09-01 19:59:09

+0

@Vadim:是的,好點 - 我會編輯它。 – 2010-09-01 20:00:13

9

1和252都是文字整數,所以計算使用整數數學。 0是最接近的整數結果。使用1.0或252.0來獲得正確的double值。

7

你分2個整數和鑄造雙,

嘗試

double num = 1d/252d;