整數是變數宣告中很常用到的一種型別,應該沒有什麼好注意的吧?
除了前一篇講到的數字型別應該注意的識相之外,整數還有一些特別需要注意的地方呢!
喔?那說來聽聽吧(板凳、托腮)。
(咳)好,那我們就開始吧!Let's Go.
.檢查整數的除法
在撰寫除式的時候,我們很容易就以 x=a/b 來表示
可是當您的變數型別為整數或者是被除數/除數為整數型別時,您期望得到的值可能會不一樣!
讓我們假設,
第一種情況:
dim x as integer
dim a as integer, b as integer
x=a/b
當 a=7, b=10 我們期望應該得到 0.7,但是實際上執行的結果:x=0
Why?
因為 a 為整數型別,b 也為整數型別,所以兩個整數的除法也會得到整數的結果!
即使您將 x 宣告為浮點數,也是一樣 x=0.0
第二種情況:
dim x as integer
dim a as double, b as double
x=a/b
通常,在 Compile 的過程,強型別的限制就會出現 error,或者您也會得到 x=0 的結果。
.檢查溢位(Overflow)
在 16 位元的時代(或更早),一個整數的最大值為 2^16 - 1(就正整數而言),
當您的變數值超過 65536 的時候(有正負值的整數,最大值為 32767),
就會產生溢位,而且通常是在 Runtime 的時候才會發生,那給使用者的感覺真的會很不好。
所以避免溢位的方法,最好是將預期變數值會很大的時候(如計算 billing),
採用 Long Integer 或 Double 的變數型別,避免掉這種情況。
(當然愈新的開發工具,在這部份有一些特別的處理,
如 int64 或 default integer 為 32 位元的長度)
.檢查計算式中間值(Intermediate results)的溢位
如同前面的敘述,除了數值本身產生的溢位之外,也有可能兩個數值都沒有溢位,
但相乘之後的值發生溢位的情況。
(如 原幣*匯率,當原幣為美金時,相乘的結果可能會使變數爆掉)
現今的 Compiler 做得比較好,對於溢位都會 raise error,不會像書中所提的,
讓您的程式因溢位產生錯誤的值而導致錯誤的計算結果。
錯字一枚「拖腮」應是「托腮」
「托腮」是「美人托腮」,很有氣質的畫面
「拖腮」是在地上拖,通常被用在被拖去海扁時使用
證明我有很認真看完整篇。
還好不是拖腮連...XD
Good!
但這好像是基本功吧!
我比較期待的Float.因為這是我PG人生第一個研究的問題.
呵呵(搔頭)
在 pantc328 大前耍大刀了 ^^