分享方式:


Decimal 資料類型 (Visual Basic)

保存帶正負號的 128 位元 (16 位元組) 值,代表可變倍率 10 倍的 96 位元 (12 位元組) 整數。 縮放係數會指定小數點右邊的位數;範圍從 0 到 28。 若縮放為 0 (無小數位數),最大可能值為 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28)。 使用 28 個小數位數時,最大值為 +/-7.9228162514264337593543950335,而最小的非零值為 +/-0.0000000000000000000000000001 (+/-1E-28)。

備註

Decimal 資料類型可為數字提供最大的有效位數。 其最多可支援 29 個有效位數,且可以代表超過 7.9228 x 10^28 的值。 其特別適用於需要大量數字但無法容許進位錯誤的計算,例如財務。

Decimal 的預設值為 0。

程式設計提示

  • 精確度。 Decimal 不是浮點數資料類型。 Decimal 結構會保存二進位整數值,以及正負號位元和整數縮放係數,其可指定值的哪個部分是小數點。 因此,Decimal 數字在記憶體中具有較浮點類型 (SingleDouble) 更精確的表示法。

  • 效能。 Decimal 資料類型是所有數值類型中最慢的一種。 在選擇資料類型之前,您應該先根據效能來衡量精確度的重要性。

  • 擴展。 Decimal 資料類型可擴展為 SingleDouble。 這表示,您可以將 Decimal 轉換成這些類型的任何一種,而不會發生 System.OverflowException 錯誤。

  • 後置的零。 Visual Basic 不會將後置零儲存在 Decimal 常值中。 不過,Decimal 變數會保留任何以計算方式取得的後置零。 說明如下例。

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    上述範例中的 MsgBox 輸出如下所示:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • 型別字元。 將常值類型字元 D 附加到常值,會強制其成為 Decimal 資料類型。 將識別項類型字元 @ 附加到任何識別項,會強制其成為 Decimal

  • Framework 型別。 在 .NET Framework 中對應的類型為 System.Decimal 結構。

範圍

您可能需要使用 D 類型字元,將大型值指派給 Decimal 變數或常數。 此需求是因為編譯器會將常值解譯為 Long,除非常值型別字元遵循常值,如下列範例所示。

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

bigDec1 的宣告不會產生溢位,因為對其指派的值會落在 Long 的範圍中。 Long 值可指派給 Decimal 變數。

bigDec2 的宣告會產生溢位錯誤,因為對其指派的值對於 Long 而言過大。 因為數值常值無法先解譯為 Long,所以無法指派給 Decimal 變數。

針對 bigDec3,常值型別字元 D 會強制編譯器將常值解譯為 Decimal,而不是解譯為 Long,藉此解決問題。

另請參閱