當編譯器看到數字文字,它選擇根據數字,標點符號和後綴(如果有的話)的大小的類型,然後在轉換它到該類型的字符的序列;所有這些都是在不考慮編譯器將如何處理數字的情況下完成的。一旦完成,編譯器將只允許將該數字用作其自己的類型,明確地將其轉換爲另一種類型,或者在下面定義的兩種情況下隱式轉換爲另一種類型。
如果號碼被解釋爲任何整數類型(int
,long
等),編譯器將允許它被用來初始化,其中數可表示任何整數類型,以及任何二進制或十進制浮點而不考慮數字是否可以在該類型中精確表示。
如果號碼鍵入Single
[由f
後綴表示],編譯器將允許它被用來初始化一個Double
,而不對所得Double
是否準確地表示與該Single
初始化的字面方面。
Double
類型的數字文本[包括一個小數點,但沒有後綴]或Decimal
[一個「d」爲後綴不是通過加上或減去接着立即]不能用於初始化任何其它的變量,即使該數字可以在目標類型中精確表示,或者結果將成爲目標類型對所涉及的數字文字的最佳表示。
注意Decimal
類型和其他浮點類型(double
和float
)之間轉換,應儘可能避免,因爲轉換的方法不是非常精確。雖然有許多對於沒有確切Decimal
表示存在double
值,有一個寬數值範圍,其中Decimal
值更緊密包裝的比double
值。人們可能會預期,轉換double
會選擇最接近的Decimal
值或至少一個Decimal
值,該值介於該值與下一個更高或更低的double
值之間,但常規轉換方法並不總是如此。在某些情況下,結果可以通過顯著保證金被關閉。
如果您發現自己必須將Double
轉換爲Decimal
,那麼您可能是在做錯某些事情。雖然有一些操作可在Double
不可用的Decimal
,這兩種類型之間進行轉換的行爲意味着什麼Decimal
結果你最終趨於變比,如果所有的計算都在Double`已經做不太精確。
好吧!謝謝你的澄清。 – user1691432 2013-05-02 22:16:31
這已經回答了你的問題?如果是這樣標記出。謝謝 – Guanxi 2013-05-04 13:03:38