Decimal 資料型別 (Visual Basic)

保存帶正負號的 128 位元 (16 個位元組) 值,表示 96 位元 (12 個位元組) 的整數,由 10 的可變乘幂所延展。 縮放比例指定小數點右邊的位數數目,範圍從 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 結構會保存二進位整數值,加上正負號位元和整數縮放比例,指定值的哪一部分是小數部分。 因為這個原因,比起浮點數型別 (Single 和 Double),Decimal 數字在記憶體裡具有更精確的表示。

  • 效能,Decimal 資料型別是所有數字型別 (Numeric Type) 中效能最慢的資料型別。 選擇資料型別之前,應先衡量精確度和效能的重要性。

  • 擴展,Decimal 資料型別會擴展至 Single 或 Double。 這表示您可以將 Decimal 轉換成這些型別的其中一個,而不會發生 System.OverflowException 錯誤。

  • 結尾的零:,Visual Basic 不會將結尾的零儲存在 Decimal 常值 (Literal) 中。 不過,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。

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

範圍

您可能需要使用 D 型別字元,指派大的值給 Decimal 變數或常數。 下列範例將說明這點。

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

除非常值後面接著常值型別字元,否則編譯器會將常值解譯為 Long。 bigDec1 的宣告不會產生溢位,因為其值在 Long 的範圍內。 不過,bigDec2 的值對於 Long 而言太大,所以編譯器會產生錯誤。 常值型別字元 D 會強制編譯器將常值解譯為 Decimal,以解決 bigDec3 的問題。

請參閱

參考

資料型別摘要 (Visual Basic)

System.Decimal

Decimal.Decimal

字串資料型別 (Visual Basic)

Double 資料型別 (Visual Basic)

型別轉換函式 (Visual Basic)

轉換摘要 (Visual Basic)

概念

有效率地使用資料型別 (Visual Basic)