2013-05-02 17 views
1

請原諒我,我沒有使用過這個網站非常多!我在Visual Studio中使用Visual Basic工作。我完成了選項編程我的項目嚴格關閉,然後當我打開選項時,我被提醒,這個代碼是錯誤的嚴格:Option Visual Basic中的嚴格On和常量?

Const TAX_Decimal As Decimal = 0.07 

的解釋是,「選項嚴格On不允許從‘雙師型’到隱式轉換「小數」」

但我想我已經宣佈它作爲一個小數!這讓我將其更改爲:

Const TAX_Decimal As Decimal = CDec(0.07) 

我這個常量做的唯一的事情就是用它乘小數並將其保存到聲明爲小數變量!

有人能告訴我,爲什麼發生這種情況?非常感謝你!

回答

1

雙人是8個字節,十進制是16個字節。選項嚴格防止自動類型轉換。默認情況下,如果您在VB.NET中使用小數寫入數字,則它被認爲是double而不是decimal。對於說您小數必須使用一些字符來指定(我的事情十進制爲m),所以如果你聲明

Const VAR as decimal = 0.07m 

那麼你不會需要鑄造。

+0

好吧!謝謝你的澄清。 – user1691432 2013-05-02 22:16:31

+0

這已經回答了你的問題?如果是這樣標記出。謝謝 – Guanxi 2013-05-04 13:03:38

0

當編譯器看到數字文字,它選擇根據數字,標點符號和後綴(如果有的話)的大小的類型,然後在轉換它到該類型的字符的序列;所有這些都是在不考慮編譯器將如何處理數字的情況下完成的。一旦完成,編譯器將只允許將該數字用作其自己的類型,明確地將其轉換爲另一種類型,或者在下面定義的兩種情況下隱式轉換爲另一種類型。

如果號碼被解釋爲任何整數類型(intlong等),編譯器將允許它被用來初始化,其中數可表示任何整數類型,以及任何二進制或十進制浮點而不考慮數字是否可以在該類型中精確表示。

如果號碼鍵入Single [由f後綴表示],編譯器將允許它被用來初始化一個Double,而不對所得Double是否準確地表示與該Single初始化的字面方面。

Double類型的數字文本[包括一個小數點,但沒有後綴]或Decimal [一個「d」爲後綴不是通過加上或減去接着立即]不能用於初始化任何其它的變量,即使該數字可以在目標類型中精確表示,或者結果將成爲目標類型對所涉及的數字文字的最佳表示。

注意Decimal類型和其他浮點類型(doublefloat)之間轉換,應儘可能避免,因爲轉換的方法不是非常精確。雖然有許多對於沒有確切Decimal表示存在double值,有一個寬數值範圍,其中Decimal值更緊密包裝的比double值。人們可能會預期,轉換double會選擇最接近的Decimal值或至少一個Decimal值,該值介於該值與下一個更高或更低的double值之間,但常規轉換方法並不總是如此。在某些情況下,結果可以通過顯著保證金被關閉。

如果您發現自己必須將Double轉換爲Decimal,那麼您可能是在做錯某些事情。雖然有一些操作可在Double不可用的Decimal,這兩種類型之間進行轉換的行爲意味着什麼Decimal結果你最終趨於變比,如果所有的計算都在Double`已經做不太精確。