2013-12-19 77 views
1

我的問題是太奇怪了,簡:奇怪的結果在C#

double a = 1/2; 
MessageBox.Show(a.ToString()); 

這表明0 我試圖與decimalfloat但它總是0

+3

因爲1/2的整數除法爲零。無關緊要你分配零。 –

+0

您需要了解編譯器處理輸入的差異和方式! (int)1 /(int)2將得到int的結果! – WhileTrueSleep

+0

這裏的故事的寓意是:**對於C#中的大多數表達式,表達式的類型分析獨立於它被分配給**的內容。僅僅因爲您將其分配給雙倍,「1/2」的值不會改變。 (這個規則的例外是lambda,它根據分配的內容改變它們的含義。) –

回答

11

你需要寫:

double a= 1/2.0d; 

int除以int編譯器生成01在將其分配給double之後,結果和

這是同樣喜歡寫作:

int resultInt = 1/2; 
double a = resultInt; 

通過在您操作2.0d指定你明確地體現你的意圖後,等分生產double

+1

或者也是1.0/2 :-) – Grundy

+0

我個人更喜歡提升分子,因爲它稍微更清楚。 – Bathsheba

4

12都被視爲整數常量。 int除以int的結果是另一個int,在投射到double之前。向編譯器指示至少有一個常量是後綴爲d或提供小數點的兩倍。

例如

double a = 1d/2d; 
5

的劃分,在整數運算這意味着你將失去精度之前的結果分配給您的double類型執行。

將其中一個文字升到double,強制執行浮點數。即寫

double a = 1.0/2; 
2

嘗試這種情況:

雙A =(雙)1 /(雙)2;

Regards,