請問如何在 EXCEL VBA define Variable data type 做 Decimal

EXCEL VBA 可以

dim N as integer
dim M as double

但為甚麼不能DEFINE做DECIMAL,

dim M as decimal

但在HELP入面有介紹DECIMAL DATA TYPE 呢類型
Data Type.JPG

本帖最後由 C_Law 於 2016-11-12 16:09 編輯

用緊 Office 2007,入面的 Help 有講:

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .


type 選擇性引數。 變數的資料型態,可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度字串)、String * length (固定長度字串)、Object、Variant、使用者自訂型態或物件型態。使用 As type 子句來分隔每個變數的宣告。


再 Click 入 Decimal 去睇會見到話:

Decimal 資料型態
一包含小數數字的資料型態。對於沒有小數點的數字,其範圍是 +/-79,228,162,514,264,337,593,543,950,335。對於有 28 個小數位數而言,其範圍是 +/-7.9228162514264337593543950335。Decimal 的最小非零數值可表示為 0.0000000000000000000000000001。

要注意的是,目前 Decimal 資料型態只可以在 Variant 內使用。您不能宣告一變數為 Decimal 型態。不過您也可以新增一 Variant ,然後使用 Cdec 函數建立其次型態為 Decimal。

TOP

Thanks C-hing. 但點用???

dim n as variant

n=cdex(10/3)

是否這樣?

TOP

本帖最後由 C_Law 於 2016-11-13 03:49 編輯
Thanks C-hing. 但點用???

dim n as variant

n=cdex(10/3)

是否這樣?
Ponya 發表於 2016/11/12 22:00


n=cdec(10/3),VBA 會先計 (10/3),由於 10 和 3 都無事先 define 類形,會當 Double 去計,再將答案(double)放入 cdec 內,計出來的 n 雖然係 Decimal,但實際上只有 Double 的準確度。

如果你用 Decimal 目的係想計到小數點後好多個位,穩陣做法係:
dim x as variant
x=cdec(10)/cdec(3)

不過,其實如果一條式混合用不同類形的數,答案會跟比較高解釋度的類形,所以   cdec(10)/3 或者 10/cdec(3) 都得。

但要小心用,尤其是一條式又+-*/ 都有的時候,係會先乘除後加減的分開一截一截去做,例如:
x=cdec(1)/3+2/3
這條式只得前半截 cdec(1)/3 係 Decimal 解像度,但後面的一截 2/3 只有 Double 解像度,實際上即係以下兩個數相加:
0.3333333333333333333333333333
0.666666666666667
結果 x 會係  1.0000000000000003333333333333 ,而不是 1。

如果改為:
x=cdec(1)/3+cdec(2)/3
先至會得到 1。

TOP

回覆 4# C_Law

清楚明白!

TOP

Thanks, C-hing, 清楚了.  書本或HELP 入面都無咁長細解釋. 但有一個應用問題, 即如果要計到一個很多小數點的數, FORMULA根本上是需要加上CDEX這個FUNCTION, 非常之不方便.

TOP