2011-03-27 104 views
9

我正在使用第一種方式,而我的新公司正在使用第二種方式。在c#中表示double的正確方法是什麼?

double x = 1.99; 

double y = 9.02D; 

哪一個是正確的,爲什麼?如果兩者都是正確的,那麼如何使用這個在不同的場景?

+0

它僅僅是多餘的指定d,因爲在「」。我有其他公司發明「規則」,但真正的統治者永遠是語言。 – 2011-03-27 19:42:56

+0

感謝球員所有積極的結果。 – 2011-03-27 20:16:08

+0

向上投票給大家。祝大家度過愉快的一天。再次感謝:) – 2011-03-27 20:27:01

回答

9

msdn

默認情況下,一個真正的數字文字上 賦值運算符 的右側被視爲雙。 但是,如果你想要的整數 被視爲雙,使用 後綴d或d,例如:複製

雙X = 3D;

所以沒有差別double x = 1.99;之間double y = 9.02D;

3

double y = 9.02D;,後綴D您的數字(實際)值轉換爲雙。如果您希望將整數值轉換爲double或指定您的值爲的確是的兩倍,則使用此值。

例如

double d = 3D; 

Reference

PS。正如Sehe提到的,這會將您的變量d轉換爲double。

var d = 3D; 

沒有D後綴,d將是一個int

+1

或者也許更令人信服'var d = 3D' – sehe 2011-03-27 19:42:35

+0

Thanks Elite :) – 2011-03-27 20:18:55

6

我會說你的公司正在這樣做的方式可能更安全。值9.02後的D強制將 整數 數字(實數)值9.02視爲雙精度值。

+1

9.02不是一個整數值。 – Alan 2011-03-27 19:37:55

+1

'9.02'不是整數值 – 2011-03-27 19:38:22

+0

被拒絕,原因如上述兩次。去掉 ? – 2011-03-27 19:44:15

2

風格上,你通常只需要當你想字面整數加一個「d」或「d」是一個雙:

double d = 1d;

在你的榜樣

因此,使得double d = 1.99d,是毫無意義,因爲編譯器已經將1.99賦值給double。更不用說當你宣佈d時,它的類型也是雙倍的。

通常,您不需要將dD添加到雙字面值。

然而,在你的情況下,第二個是正確的,因爲這是你付錢給你的人選擇的風格,最後,這纔是真正重要的。

+0

謝謝Alan。 :) +1,因爲我將同樣的想法傳達給我的同事。 :)偉大的人都認爲一樣。 – 2011-03-27 20:22:36

2

後綴d很重要,同時使用反射和其他動態用法來強制編譯器將數字視爲double而不是整數,其中double可以包含數字而不包含小數。 1.99是完美的雙。

使用反射使用1將導致轉換錯誤。

PropertyInfo p... 

p.SetValue(obj, 1) 

會拋出錯誤,但是

p.SetValue(obj, 1D) 

將正常工作。

var x = 1; 

x是INT

var x = 1D; 

x是兩倍。

+1

至少使用某些格式 – 2011-03-27 19:42:38

+0

對不起,我在iPhone中輸入了此內容,iPhone中沒有格式支持。 – 2011-03-27 19:43:33

+0

謝謝亨克:)) – 2011-03-27 20:15:22

4

浮點文字沒有後綴是double,所以沒什麼1.991.99D(或1.99d)沒有區別 - 除了後者的方式使得它明確的,這確實是一個double。所以這是一個風格問題,真的。總的來說,你當然應該堅持你公司的風格(除非你有一個非常有說服力的理由,認爲風格是「錯誤的」 - 在這種情況下,你應該說服公司改變風格,而不是僅僅默默地違反它; - ))。

+0

我喜歡你的幽默感。 :) – 2011-03-27 20:16:51

+1

謝謝 - 但雖然我幽默地表達了它,我也認真對待它。唯一比糟糕的編碼風格更糟糕的是缺乏編碼風格或不同編碼風格的混合:-) – 2011-03-27 20:35:41

+0

是的,你是對的。我以前的公司遭受了很多因爲不好的編碼風格,或者更好的是不確保所有程序員都遵循相同的代碼風格。任何方式,所有程序員的好消息。謝謝 – 2011-03-30 21:33:51

4

對於一個簡單的聲明,它似乎是無關緊要的。

的「d」後綴可能是情況非常有用,例如這樣的:

int n = 10; 
double a = n/3; // 3 
double a = n/3d; // 3.333.. 

但它是一種欠佳無論如何,因爲德乙取決於(N)的雙隱式轉換做除法之前。

同樣的道理,如果你傳遞一個浮動常數所發生的方法有兩個重載:

void foo(float bar); 
void foo(double bar); 

你可以區分你要撥打的版本通過調用:

X.foo(3.0D); 

再次,而不是最好的形式。

至於簡單的聲明,沒有速度優勢,因爲編譯器可能會優化它。

(從here借例如)

+0

使用函數解釋更容易理解。謝謝。 :) – 2011-03-27 20:19:59

相關問題