2012-08-08 55 views
0

您認爲這是一個錯誤還是預期的行爲?隱式強制轉換產生不正確的結果

考慮以下

1 * (2/(1+2)) 

    equals 0 

    1 * ((double)2/(1+2)) 

    equals 0.6667 
+2

沒關係,因爲在第一行有隱式轉換爲int。如果你想要使用double,你可以使用雙數字格式'1 *(2.0 /(1 + 2)) ' – user854301 2012-08-08 05:48:30

+0

@ user854301:它看起來像編譯器應該能夠解決的問題。 – sgtz 2012-08-08 05:50:34

+0

只要你理解類型轉換,它的預期行爲:)對於許多新手來說它是一個混亂。總是指定轉換:) – Zenwalker 2012-08-08 05:50:54

回答

3

這是不是一個錯誤。所有操作數爲int的算術運算結果爲int
這也是documented in the MSDN

當你把兩個整數,結果始終是整數。例如,7/3的結果是2.要確定7/3的餘數,請使用餘數運算符(%)。要獲得商數爲有理數或分數,給予股息或除數類型float或double類型。您可以通過將小數點右邊的小數點表示分數或除數來隱式地做到這一點

+0

這是從C++/C遇到的,還是C#獨有的? – sgtz 2012-08-08 05:52:31

+1

@sgtz:在C,C++,Java等中是一樣的 – 2012-08-08 05:52:57

1

你應該使用雙/浮點數,如果你想在這個格式有結果:

1 * (2.0/(1+2)) 

1 * (2f/(1+2)) 

1 * (2d/(1+2)) 
相關問題