SlideShare a Scribd company logo
1 of 54
新觀念的新觀念的 VB6VB6 教本教本
第第 66 章章 資料型別資料型別
6-1 "1"6-1 "1" ++ "1"≠"2""1"≠"2"
資料型別的觀念資料型別的觀念
---- 比較它們的差異比較它們的差異
 1+11+1 等於等於 22
"1"+"1""1"+"1" 等於等於 1111
 Print #10/5/97# > #8/5/97#Print #10/5/97# > #8/5/97# 得到得到 TrueTrue
Print "10/5/97" > "8/5/97"Print "10/5/97" > "8/5/97" 得到得到 FalseFalse
 Print 4.0/3Print 4.0/3 印出印出 1.333333333333331.33333333333333
Print 4/3Print 4/3 印出印出 1.3333331.333333 (VB 5.0(VB 5.0 版版 ))
Print 4/3Print 4/3 印出印出 1.333333333333331.33333333333333
(VB 6.0(VB 6.0 版版 ))
6-26-2 VBVB 的資料型別的資料型別
VBVB 的資料型別的資料型別
資料類別資料類別 資料型別資料型別 型別的英文名稱型別的英文名稱
字串字串 字串字串 StringString
日期時間日期時間 日期時間日期時間 DateDate
布林布林 布林布林 BooleanBoolean
數值數值 整數整數
長整數長整數
倍精準度倍精準度
單精準度單精準度
IntegerInteger
LongLong
DoubleDouble
SingleSingle
檢驗資料的型別檢驗資料的型別
? ( "Comput er ")TypeName
St r i ng
用來檢查資料型別 字串
字串型別
檢驗資料的型別檢驗資料的型別
 ? TypeName(#11/25/97#)? TypeName(#11/25/97#) '' 日期日期
DateDate '' 日期時間型別日期時間型別
 ? TypeName(#12:35:50#)? TypeName(#12:35:50#) '' 時間時間
DateDate '' 日期時間型別日期時間型別
 ? TypeName(True)? TypeName(True) '' 布林資料布林資料
BooleanBoolean '' 布林型別布林型別
檢驗數 資料的型別值檢驗數 資料的型別值
 ? TypeName(1.5)? TypeName(1.5) 小數小數
DoubleDouble 倍精準度型別倍精準度型別
 ? TypeName(4.9E+12)? TypeName(4.9E+12) 浮點數浮點數
DoubleDouble 倍精準度型別倍精準度型別
 ? TypeName(100)? TypeName(100) 整數整數
IntegerInteger 整數型別整數型別
 ? TypeName(100000)? TypeName(100000) 整數整數
LongLong 長整數型別長整數型別
 ? TypeName(123456789012)? TypeName(123456789012) 整數整數
DoubleDouble 倍精準度型別倍精準度型別
6-36-3 數 資料型別值數 資料型別值
整數型別整數型別
 所佔用的空間是所佔用的空間是 2 bytes2 bytes ,也就是,也就是 1616 個個
位元位元 (bit)(bit) 。。
 共可表示共可表示 221616
=65536=65536 個整數 ,又因為其值個整數 ,又因為其值
中一半的數要用來表示負數,所以整數中一半的數要用來表示負數,所以整數
的範圍在的範圍在 -32768-32768 ~~ 3276732767 之間。之間。
例如:例如:
2048020480 '' 數 介於值數 介於值 -32768-32768 ~~ 3276732767 之之
間,所以會存成整數型別間,所以會存成整數型別
長整數型別長整數型別
 所佔用的空間是所佔用的空間是 4 bytes4 bytes 等於等於 3232 個位元個位元 (bit)(bit) 。。
 可表示的整數個數有可表示的整數個數有 223232
=2=21616
×2×21616
=65536×65536=65536×65536 ,,
是整數型別的是整數型別的 6553665536 倍。倍。
 其數 範圍介於值其數 範圍介於值 -2147483648-2147483648 ~~ 21474836472147483647
之間,約之間,約 99 ~~ 1010 位數。位數。如果數 超過整數型值如果數 超過整數型值
別的容量,但可以放得進別的容量,但可以放得進 4 bytes4 bytes 裡面,則會被裡面,則會被
存成長整數型別,例如:存成長整數型別,例如:
25002500 '' 在整數範圍之內在整數範圍之內 ,, 所以存成整數型所以存成整數型
別別
5600056000 '' 超過整數範圍超過整數範圍 ,, 但是在長整數範圍但是在長整數範圍
之內之內 ,, 所以存成長整數型別所以存成長整數型別
精準度型別精準度型別
型型
別別
所佔所佔
空間空間
有效有效
位數位數
指數值指數值
範圍範圍
可表示的數 範圍值可表示的數 範圍值
倍倍
精精
準準
度度
8 bytes8 bytes 1515
位位
-324-324 ~~
308308
負數:負數: -1.79E+308-1.79E+308
~~
-4.94E-324-4.94E-324
正數:正數: 4.94E-3244.94E-324
~~
1.79E+3081.79E+308
單單
精精
準準
度度
4 bytes4 bytes
77 位位 -45-45 ~~ 3838 負數:負數: -3.4E+38-3.4E+38 ~~
-1.4E-45-1.4E-45
正數:正數: 1.4E-451.4E-45 ~~
3.4E+383.4E+38
 如果一個數 被表示成小數或浮點數,值如果一個數 被表示成小數或浮點數,值 VBVB 都會將都會將
它存成倍精準度型別。它存成倍精準度型別。
 例如:例如:
56.39656.396 小數表示法,存成倍精準度型別小數表示法,存成倍精準度型別
1.8765E+651.8765E+65 浮點數表示法,存成倍精準度型別浮點數表示法,存成倍精準度型別
1000.01000.0 雖然等於整數雖然等於整數 10001000 ,但卻是小數,但卻是小數
表示法,依然存成倍精準度型別表示法,依然存成倍精準度型別
資料被存成倍精準度型別的情況一資料被存成倍精準度型別的情況一
資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二
 如果是整數表示法,而其數 超過長整值如果是整數表示法,而其數 超過長整值
數範圍,該整數也會存成倍精準度型別數範圍,該整數也會存成倍精準度型別
,例如:,例如:
98765432109879876543210987 ‘‘ 超過長整數範圍,超過長整數範圍,
存成倍精準度型別存成倍精準度型別
 倍精準度型別的有效位數為倍精準度型別的有效位數為 1515 位,如果位,如果
數 表示法中的位數超過值數 表示法中的位數超過值 1515 位,位, VBVB 將將
會對多餘的位數採四捨五入法,例如:會對多餘的位數採四捨五入法,例如:
Print 1.23456789012345678Print 1.23456789012345678
1.234567890123461.23456789012346
Print 987654321098765432Print 987654321098765432
9.87654321098765E+179.87654321098765E+17
資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (2)(2)
 單精準度型別的有效位數有單精準度型別的有效位數有 77 位,但是當我們位,但是當我們
表示一個位數低於表示一個位數低於 77 位的實數時,位的實數時, VBVB 還是不還是不
會將該數 存成單精準度型別,例如:值會將該數 存成單精準度型別,例如:值
1.3351.335
會被存成倍精準度型別,是因為會被存成倍精準度型別,是因為 VBVB 內部作法內部作法
的關係,不是因為的關係,不是因為 1.3351.335 無法存成單精準度型無法存成單精準度型
別。別。
資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (3)(3)
 我們可以主動要求我們可以主動要求 VBVB 將資料存成單精將資料存成單精
準度型別,方法是在數 後面加上 ‘值準度型別,方法是在數 後面加上 ‘值 !’!’ ,,
例如:例如:
1.335!1.335!
用用 !! 符號,要求符號,要求 VBVB 將將 1.3351.335 存存
成單精準度型別成單精準度型別
資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (4)(4)
 當兩整數相除時,對當兩整數相除時,對 VB5VB5 來說,其結果也是存來說,其結果也是存
成單精準度型別,例如:成單精準度型別,例如: (( 不過對不過對 VB6VB6 來說,來說,
卻是存成倍精準度型別卻是存成倍精準度型別 ))
Print 4/3Print 4/3 兩整數相除兩整數相除 VB5VB5
1.3333331.333333
Print 4/3Print 4/3 兩整數相除兩整數相除 VB6VB6
1.333333333333331.33333333333333
Print 4.0/3Print 4.0/3 這是倍精準數除以整數這是倍精準數除以整數
1.333333333333331.33333333333333
資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二
(VB5 vs. VB6)(VB5 vs. VB6)
6-46-4 型別宣告符號型別宣告符號
VBVB 如何決定資料的型別如何決定資料的型別
如果是整數的表示法,依序判斷以下數 範圍:值如果是整數的表示法,依序判斷以下數 範圍:值
1.1. 數 介於值數 介於值 -32768-32768 ~~ 3276732767 之間,存成整數型別之間,存成整數型別
。。
2.2. 數 介於值數 介於值 -2147483648-2147483648 ~~ 21474836472147483647 之間,存之間,存
成長整數型別。成長整數型別。
3.3. 數 超過長整數範圍,存成倍精準度型別。值數 超過長整數範圍,存成倍精準度型別。值
4.4. 如果不是整數表示法,一律存成倍精準度型別。如果不是整數表示法,一律存成倍精準度型別。
利用利用 TypeNameTypeName 來檢驗來檢驗
 Print TypeName(1024)Print TypeName(1024)
IntegerInteger
 Print TypeName(56000)Print TypeName(56000)
LongLong
 Print TypeName(10.98 )Print TypeName(10.98 )
DoubleDouble
告訴告訴 VBVB 我們希望儲存的我們希望儲存的
資料型別資料型別
 Print TypeName(1.335!)Print TypeName(1.335!)
Single ' VBSingle ' VB 果然將資料存成單精準度型別了果然將資料存成單精準度型別了
數 型別的型別宣告符號值數 型別的型別宣告符號值
型別宣告符號型別宣告符號 宣告之型別宣告之型別
%%
整數整數
&&
長整數長整數
!!
單精準度單精準度
##
倍精準度倍精準度
數 型別的型別宣告符號值數 型別的型別宣告符號值 ---- 例例
子子
1536&1536& '' 雖然雖然 15361536 只要存成整數型別只要存成整數型別
即即 可,但我們 利用可,但我們 利用 && 符號將它符號將它
宣宣 告成長整數型別告成長整數型別
48000#48000# '' 雖然雖然 4800048000 只要存成長整數型只要存成長整數型
別別 即可,但我們利用即可,但我們利用 ## 符號將它符號將它
宣宣 告成倍精準度型別告成倍精準度型別
123%123% ' 123' 123 原本就會存成整數型別,再原本就會存成整數型別,再
加上加上 %% 的的 整數型別宣告符整數型別宣告符
號,有號,有 點多餘,卻是正確的點多餘,卻是正確的
型別宣告的注意事項型別宣告的注意事項
 非整數的表示法,不能宣告成整數或長非整數的表示法,不能宣告成整數或長
整數型別。整數型別。
 不能將資料宣告成不足以容納該資料的不能將資料宣告成不足以容納該資料的
型別。型別。
 位數多的數 宣告成有效位數少的型別值位數多的數 宣告成有效位數少的型別值
時,數 會被四捨五入。值時,數 會被四捨五入。值
型別宣告的注意事項型別宣告的注意事項 ---- 例子例子
Print 100.0%Print 100.0%
錯誤錯誤 ,, 雖然雖然 100.0100.0 等於等於
100,100, 但這不是整數表示法但這不是整數表示法
,, 不能宣告成整數型別。不能宣告成整數型別。Print 48000%Print 48000%
錯誤,將超過整數範圍的錯誤,將超過整數範圍的
4800048000 宣告成整數。宣告成整數。
Print 2.34567896!Print 2.34567896!
2.3456792.345679
位數位數 99 位的數 宣告成有值位的數 宣告成有值
效位效位 77 位的單精準度型別位的單精準度型別
,多餘的兩位,多餘的兩位 (96)(96) 會被四會被四
捨五入。捨五入。
6-56-5 變數與資料型別變數與資料型別
用用 TypeNameTypeName 來檢驗變數的型別來檢驗變數的型別
(( 11 ))
A = 100A = 100
? TypeName(A)? TypeName(A)
IntegerInteger
將整數型別的將整數型別的 100100 指定給變數指定給變數 AA
檢 變數查檢 變數查 AA 的型別的型別
此時變數此時變數 AA 是整數型別是整數型別
A = "VB"A = "VB"
? TypeName(A)? TypeName(A)
StringString
重新指定字串型別的重新指定字串型別的 "VB""VB" 給變數給變數
AA
變數變數 AA 的型別也變成了字串型別的型別也變成了字串型別
用用 TypeNameTypeName 來檢驗變數的型別來檢驗變數的型別
(( 22 ))
L& = 65500L& = 65500
? TypeName(L&)? TypeName(L&)
LongLong
使用使用 && 符號將變數符號將變數 LL 宣告成長宣告成長
整整
數型數型
別別
長整數型別長整數型別L& = 100L& = 100
? TypeName(L&)? TypeName(L&)
LongLong
將整數型別的將整數型別的 100100 指定給指定給 LL 之之
後,後,
……
 不定型不定型 (Variant)(Variant) 變數變數 ::變數未加型別宣告符號,其型別會隨著資料的內容變數未加型別宣告符號,其型別會隨著資料的內容
來改變。來改變。
 定型定型變數:變數加了型別宣告符號,其型別固定,不會隨著指定給它的資變數:變數加了型別宣告符號,其型別固定,不會隨著指定給它的資
料來改變。料來改變。
 每一個定型變數都屬於某一特定型別,例如每一個定型變數都屬於某一特定型別,例如 L&L& 是長整數型別是長整數型別 (( 因為最後因為最後
有有 && 符號符號 )) ,在指定資料時,它只接受可以轉成這個型別的資料。,在指定資料時,它只接受可以轉成這個型別的資料。
 不定型變數的型別將隨著指定給它的資料來變,定型變數的型別則是永遠不定型變數的型別將隨著指定給它的資料來變,定型變數的型別則是永遠
不變不變。。
不定型變數與定型變數不定型變數與定型變數 (( 11 ))
 L& = 34896L& = 34896 ' 34896' 34896 同樣是長整數型別,自然可接受同樣是長整數型別,自然可接受
L& = 100L& = 100 ' 100' 100 是整數型別,也可接受是整數型別,也可接受
L& = “VB”L& = “VB” '' 錯誤!字串 “錯誤!字串 “ VB”VB” 無法轉換成長整數無法轉換成長整數
 L& = “82500”L& = “82500” '' 雖然 “雖然 “ 82500”82500” 是字串,但可以轉成是字串,但可以轉成
? TypeName(L&)? TypeName(L&) '' 長整數,所以可接受長整數,所以可接受
LongLong '' 證明證明 LL 還是長整數還是長整數
 L& = 9.8L& = 9.8 '' 將將 9.89.8 轉換成整數,只好四捨五入轉換成整數,只好四捨五入
Print L&Print L&
1010
 L& = 7.85E+12L& = 7.85E+12 '' 錯誤錯誤 , 7.85E+12, 7.85E+12 超過長整數的數超過長整數的數
範圍值範圍值
不定型變數與定型變數不定型變數與定型變數 (( 22 ))
 A = 34896A = 34896 '' 此時變數此時變數 AA 是「長整數」型別是「長整數」型別
A = 100A = 100 '' 變數變數 AA 變成了「整數」型別變成了「整數」型別
A = “VB”A = “VB” '' 變數變數 AA 又變成「字串」型別又變成「字串」型別
A = “82500”A = “82500” '' 變數變數 AA 還是「字串」型別還是「字串」型別
? TypeName(A)? TypeName(A)
StringString '' 證明變數證明變數 AA 還是字串還是字串
 A = 9.8A = 9.8 '' 變數變數 AA 變成「倍精準度」型別變成「倍精準度」型別
Print APrint A
9.89.8 '' 沒有類似變數沒有類似變數 LL 四捨五入四捨五入
的情形的情形
 A = 7.85E+12A = 7.85E+12 '' 變數變數 AA 還是倍精準度型別,還是倍精準度型別,
沒有類似變數沒有類似變數 LL 產生錯誤的情形產生錯誤的情形
不定型變數與定型變數不定型變數與定型變數 (( 33 ))
6-66-6 變數與常數符號的宣告變數與常數符號的宣告
DimDim 敘述敘述 (1)(1)
 格式:格式:
 使用例一:使用例一:
 使用例二:使用例二:
Dim 變數名稱 As 英文型別名稱
變數名稱 型別名稱
Dim S As String ' 將變數 S宣告成字串型別
Dim X As Date ' 將變數 X 宣告成日期時間型別
Dim A 省略了 "As 英文型別名稱 ", 則變數 A
將是一個不定型變數
DimDim 敘述 – 注意事項敘述 – 注意事項
 DimDim 敘述不能在即時運算視窗裡面使用敘述不能在即時運算視窗裡面使用
,只能在程式視窗裡面使用,只能在程式視窗裡面使用。。
DimDim 敘述敘述 (2)(2)
 格式:格式: DimDim 變數名稱變數名稱 ++ 型別宣告符號型別宣告符號
Dim A% ' 將變數 A 宣告成整數型別
Dim S$ ' 將變數 S 宣告成字串型別
Dim V ' 未加型別宣告符號,表示不定型變數
固定長度字串固定長度字串
 格式:格式:
 例子:例子:
Di m S As St r i ng * 80
指定字串的長度
Dim 字串變數名 As String * 字串長度
Private Sub Command1_Click()Private Sub Command1_Click()
Dim S1 As StringDim S1 As String ' S1' S1 是變動長度字串是變動長度字串
Dim S2 As String * 80Dim S2 As String * 80 ' S2' S2 是固定長度字串是固定長度字串
S1 = "abcde"S1 = "abcde"
S2 = "12345"S2 = "12345" '' 利用利用 LenLen 計算字串的長度計算字串的長度
Print "S1Print "S1 長度長度 ="; Len(S1), "S2="; Len(S1), "S2 長度長度 ="; Len(S2)="; Len(S2)
S1 = "abcdefghij"S1 = "abcdefghij"
S2 = "1234567890"S2 = "1234567890"
Print "S1Print "S1 長度長度 ="; Len(S1), "S2="; Len(S1), "S2 長度長度 ="; Len(S2)="; Len(S2)
End SubEnd Sub
固定長度字串 – 實例固定長度字串 – 實例 (1)(1)
 上一頁程式輸出結果:上一頁程式輸出結果:
S1S1 長度長度 = 5= 5 S2S2 長度長度 = 80= 80
S1S1 長度長度 = 10= 10 S2S2 長度長度 = 80= 80
可見固定長度字串的長度是固定的,不可見固定長度字串的長度是固定的,不
會隨著字串的內容而改變其長度。會隨著字串的內容而改變其長度。
變動長度字串則會隨著字串的內容而改變動長度字串則會隨著字串的內容而改
變其長度。變其長度。
固定長度字串 – 實例固定長度字串 – 實例 (2)(2)
型別宣告的限制型別宣告的限制 (1)(1)
 一個變數一旦宣告成某種型別以後,就不能在後面一個變數一旦宣告成某種型別以後,就不能在後面
的敘述中又重新宣告它的型別,例如:的敘述中又重新宣告它的型別,例如:
L& = 100 'L& = 100 ' 已經將變數已經將變數 LL 宣告成宣告成長整數長整數型別型別
L% = 100L% = 100 '' 錯誤!企圖將變數錯誤!企圖將變數 LL 重新宣告為重新宣告為
整數整數型別型別
型別宣告的限制型別宣告的限制 (2)(2)
 即使是一個不定型變數,當我們第一次使用它時即使是一個不定型變數,當我們第一次使用它時
,它的型別就已經被宣告成,它的型別就已經被宣告成不定型不定型了,也是不能了,也是不能
重新宣告的,例如:重新宣告的,例如:
A = 100 ' 變數 A 是一個不定型變數了 , 而其內容是整數型
別
A = "VB" ' 將內容的型別改成字串,沒問題
A% = 100 ' 錯誤!重新宣告變數 A 的型別,不行
常數符號常數符號
 數學上的圓周率數學上的圓周率 π(π( 讀成讀成 pi)pi) ,, ππ 就是就是
3.1415933.141593 這個常數的這個常數的常數符號常數符號。。
S = pi * R ^ 2
S = 3.141593 * R ^ 2
運算式中放的是 常數符號
運算式中放的是 常數值
 格式:格式:
ConstConst 常數名稱常數名稱 == 常數表示法常數表示法
ConstConst 常數名稱常數名稱 AsAs 型別名稱型別名稱 == 常數表示法常數表示法
ConstConst 常數名稱常數名稱 ++ 型別宣告符號型別宣告符號 == 常數表示法常數表示法
 例子:例子:
Const pi = 3.141593Const pi = 3.141593
Const ver = "6.0Const ver = "6.0 中文版中文版 ""
Const noon = #12:00:00#Const noon = #12:00:00#
Const pi As Double = 3.141593Const pi As Double = 3.141593
Const pi# = 3.141593Const pi# = 3.141593
常數符號的定義常數符號的定義
6-76-7 不同型別資料的轉換與運不同型別資料的轉換與運
算算
不同型別資料的轉換與運算不同型別資料的轉換與運算
I% = "123"I% = "123"
雖然雖然 I%I% 是整數型別,而是整數型別,而
"123""123" 是字串型別, 但是字串型別, 但 "123""123"
的內容完全是數 ,所以值的內容完全是數 ,所以值 VBVB
會自動 將會自動 將 "123""123" 轉成轉成 123123 再再
指定給指定給 I%I%
S$ = 123S$ = 123
VBVB 會自動將會自動將 123123 轉成轉成 "123""123"
再指定給字串型別的再指定給字串型別的 S$S$ 。。
? #9:30# > "8:30"? #9:30# > "8:30"
VBVB 在進行比較運算以前,會在進行比較運算以前,會
先將字串型別的先將字串型別的 "8:30""8:30" 轉成轉成
日期時間型別的日期時間型別的 #8:30##8:30# ,所,所
I% = "123A"I% = "123A"
字串裡含有非數字的字元字串裡含有非數字的字元
'A''A' ,所以字串 無法轉成,所以字串 無法轉成
數 ,會產生錯誤值數 ,會產生錯誤值
不同型別資料的轉換與運算不同型別資料的轉換與運算 ---- 錯誤錯誤
例例
字串與數 的運算值字串與數 的運算值 (1)(1)
 數 型字串必須是內容符合數 表示法的字值 值數 型字串必須是內容符合數 表示法的字值 值
串,反之,則為文字型字串,例如:串,反之,則為文字型字串,例如:
"3600""3600"
"73.59""73.59"
"1.5E-13""1.5E-13" '' 以上三個字串皆為數 型字串值以上三個字串皆為數 型字串值
"123 6""123 6" '' 含有非數字的空白字元,屬於文字型字串含有非數字的空白字元,屬於文字型字串
"#1005""#1005" '' 含有非數字的含有非數字的 '#''#' 字元,屬於文字型字串字元,屬於文字型字串
Print "123" + "ABC"Print "123" + "ABC"
123ABC123ABC
當數 型字串與字串在一起做值當數 型字串與字串在一起做值
運算時,數 型字串仍維持字值運算時,數 型字串仍維持字值
串特性,所以運算符號串特性,所以運算符號 '+''+' 被被
視為字串的串接。視為字串的串接。
Print "123" + 100Print "123" + 100
223223
當數 型字串與數 在一起做值 值當數 型字串與數 在一起做值 值
運算時,數 型字串被當作數值運算時,數 型字串被當作數值
,所以運算符號值,所以運算符號值 '+''+' 被視為被視為
數 的相加。值數 的相加。值
Print "123" + "100"Print "123" + "100"
123100123100
當兩個數 型字串在一起運算值當兩個數 型字串在一起運算值
時,兩個數 字串都維持字串值時,兩個數 字串都維持字串值
特性,所以運算符號特性,所以運算符號 '+''+' 還是還是
字串與數 的運算值字串與數 的運算值 (2)(2)
I% = "55"I% = "55"
A = "55"A = "55"
"55""55" 指定給整數的指定給整數的 I%I% ,會被,會被
轉成整數轉成整數? "10" + I%? "10" + I%
6565
變數變數 II 是整數型別,所以是整數型別,所以 "10""10"
被視為數值被視為數值? "10" + A? "10" + A
10551055
AA 是不定型變數,而其內容為是不定型變數,而其內容為
"55""55" ,所以,所以 "10""10" 維持字串本維持字串本
性性
字串與數 的運算值字串與數 的運算值 (3)(3)
不同精準度的數 運算值不同精準度的數 運算值 (1)(1)
 將高精準度的資料存入低精準度的變數將高精準度的資料存入低精準度的變數
時,將採四捨五入的方法將資料轉換成時,將採四捨五入的方法將資料轉換成
較低的精準度。例如:較低的精準度。例如:
I% = 22.6I% = 22.6
Print I%Print I%
2323
 將高精準度的資料存入低精準度的變數將高精準度的資料存入低精準度的變數
時,轉換後的數 不能超過低精準度型值時,轉換後的數 不能超過低精準度型值
別的數 範圍,例如:值別的數 範圍,例如:值
不同精準度的數 運算值不同精準度的數 運算值 (2)(2)
I% = 32767.6‘ 錯誤, 32767.6 轉換成整數後變成
' 32768 ,超出整數的範圍。
 當運算符號兩邊出現不同精準度的數 資料時值當運算符號兩邊出現不同精準度的數 資料時值
VBVB 會以其中精準度較高者為準,將另一邊的會以其中精準度較高者為準,將另一邊的
數 換算成較高之精準度後再運算,運算之結值數 換算成較高之精準度後再運算,運算之結值
果也以較高之精準度表示。例如:果也以較高之精準度表示。例如:
不同精準度的數 運算值不同精準度的數 運算值 (3)(3)
D# = 7
Print D#/6 ' 運算式以倍精準度處理
1.16666666666667
I% = 7
N! = 6
Print I%/N! ' 運算式以單精準度處理
1.166667
小心小心 ! 0.5! 0.5 的四捨五入的四捨五入
I1% = 1.5 ‘ 都會被四捨五入成為整數
I2% = 4.5
? I1%, I2% ’ 我們預期的結果是 2 跟 5
2 4 ‘ 但執行的結果卻是 2 跟 4
I1% = 1.5 ’ 被捨棄的 0.5 前一位是奇數,所以進位
I2% = 4.5 ‘ 被捨棄的 0.5 前一位是偶數,所以捨棄
I% = 4.5001 ' 被捨棄的 5001 不是剛好等於 5 ,所以與我們
? I% ' 過去的習慣一樣,直接進位。
5
避免數 運算時的溢位錯誤值避免數 運算時的溢位錯誤值
 I% = 32770I% = 32770
' 32770' 32770 超過整數的範圍超過整數的範圍 (-32768(-32768 ~~ 32767),32767),
所以產生所以產生溢位溢位的錯誤的錯誤
 可能發生溢位錯誤的例子:可能發生溢位錯誤的例子:
D# = I% * 256D# = I% * 256
 修正:修正:
D# = I% * 256&D# = I% * 256&

More Related Content

More from jameschsc

新觀念的VB6教本ch13
新觀念的VB6教本ch13新觀念的VB6教本ch13
新觀念的VB6教本ch13jameschsc
 
新觀念的VB6教本ch12
新觀念的VB6教本ch12新觀念的VB6教本ch12
新觀念的VB6教本ch12jameschsc
 
新觀念的VB6教本ch11
新觀念的VB6教本ch11新觀念的VB6教本ch11
新觀念的VB6教本ch11jameschsc
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10jameschsc
 
新觀念的VB6教本ch09
新觀念的VB6教本ch09新觀念的VB6教本ch09
新觀念的VB6教本ch09jameschsc
 
新觀念的VB6教本ch07
新觀念的VB6教本ch07新觀念的VB6教本ch07
新觀念的VB6教本ch07jameschsc
 
新觀念的VB6教本ch05
新觀念的VB6教本ch05新觀念的VB6教本ch05
新觀念的VB6教本ch05jameschsc
 
新觀念的VB6教本ch01
新觀念的VB6教本ch01新觀念的VB6教本ch01
新觀念的VB6教本ch01jameschsc
 
新觀念的VB6教本ch02
新觀念的VB6教本ch02新觀念的VB6教本ch02
新觀念的VB6教本ch02jameschsc
 
新觀念的VB6教本ch04
新觀念的VB6教本ch04新觀念的VB6教本ch04
新觀念的VB6教本ch04jameschsc
 
新觀念的VB6教本ch03
新觀念的VB6教本ch03新觀念的VB6教本ch03
新觀念的VB6教本ch03jameschsc
 

More from jameschsc (11)

新觀念的VB6教本ch13
新觀念的VB6教本ch13新觀念的VB6教本ch13
新觀念的VB6教本ch13
 
新觀念的VB6教本ch12
新觀念的VB6教本ch12新觀念的VB6教本ch12
新觀念的VB6教本ch12
 
新觀念的VB6教本ch11
新觀念的VB6教本ch11新觀念的VB6教本ch11
新觀念的VB6教本ch11
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10
 
新觀念的VB6教本ch09
新觀念的VB6教本ch09新觀念的VB6教本ch09
新觀念的VB6教本ch09
 
新觀念的VB6教本ch07
新觀念的VB6教本ch07新觀念的VB6教本ch07
新觀念的VB6教本ch07
 
新觀念的VB6教本ch05
新觀念的VB6教本ch05新觀念的VB6教本ch05
新觀念的VB6教本ch05
 
新觀念的VB6教本ch01
新觀念的VB6教本ch01新觀念的VB6教本ch01
新觀念的VB6教本ch01
 
新觀念的VB6教本ch02
新觀念的VB6教本ch02新觀念的VB6教本ch02
新觀念的VB6教本ch02
 
新觀念的VB6教本ch04
新觀念的VB6教本ch04新觀念的VB6教本ch04
新觀念的VB6教本ch04
 
新觀念的VB6教本ch03
新觀念的VB6教本ch03新觀念的VB6教本ch03
新觀念的VB6教本ch03
 

Recently uploaded

澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书kathrynalvarez364
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书kathrynalvarez364
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制kathrynalvarez364
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单jakepaige317
 

Recently uploaded (6)

澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
 

新觀念的VB6教本ch06

  • 1. 新觀念的新觀念的 VB6VB6 教本教本 第第 66 章章 資料型別資料型別
  • 2. 6-1 "1"6-1 "1" ++ "1"≠"2""1"≠"2"
  • 3. 資料型別的觀念資料型別的觀念 ---- 比較它們的差異比較它們的差異  1+11+1 等於等於 22 "1"+"1""1"+"1" 等於等於 1111  Print #10/5/97# > #8/5/97#Print #10/5/97# > #8/5/97# 得到得到 TrueTrue Print "10/5/97" > "8/5/97"Print "10/5/97" > "8/5/97" 得到得到 FalseFalse  Print 4.0/3Print 4.0/3 印出印出 1.333333333333331.33333333333333 Print 4/3Print 4/3 印出印出 1.3333331.333333 (VB 5.0(VB 5.0 版版 )) Print 4/3Print 4/3 印出印出 1.333333333333331.33333333333333 (VB 6.0(VB 6.0 版版 ))
  • 5. VBVB 的資料型別的資料型別 資料類別資料類別 資料型別資料型別 型別的英文名稱型別的英文名稱 字串字串 字串字串 StringString 日期時間日期時間 日期時間日期時間 DateDate 布林布林 布林布林 BooleanBoolean 數值數值 整數整數 長整數長整數 倍精準度倍精準度 單精準度單精準度 IntegerInteger LongLong DoubleDouble SingleSingle
  • 6. 檢驗資料的型別檢驗資料的型別 ? ( "Comput er ")TypeName St r i ng 用來檢查資料型別 字串 字串型別
  • 7. 檢驗資料的型別檢驗資料的型別  ? TypeName(#11/25/97#)? TypeName(#11/25/97#) '' 日期日期 DateDate '' 日期時間型別日期時間型別  ? TypeName(#12:35:50#)? TypeName(#12:35:50#) '' 時間時間 DateDate '' 日期時間型別日期時間型別  ? TypeName(True)? TypeName(True) '' 布林資料布林資料 BooleanBoolean '' 布林型別布林型別
  • 8. 檢驗數 資料的型別值檢驗數 資料的型別值  ? TypeName(1.5)? TypeName(1.5) 小數小數 DoubleDouble 倍精準度型別倍精準度型別  ? TypeName(4.9E+12)? TypeName(4.9E+12) 浮點數浮點數 DoubleDouble 倍精準度型別倍精準度型別  ? TypeName(100)? TypeName(100) 整數整數 IntegerInteger 整數型別整數型別  ? TypeName(100000)? TypeName(100000) 整數整數 LongLong 長整數型別長整數型別  ? TypeName(123456789012)? TypeName(123456789012) 整數整數 DoubleDouble 倍精準度型別倍精準度型別
  • 10. 整數型別整數型別  所佔用的空間是所佔用的空間是 2 bytes2 bytes ,也就是,也就是 1616 個個 位元位元 (bit)(bit) 。。  共可表示共可表示 221616 =65536=65536 個整數 ,又因為其值個整數 ,又因為其值 中一半的數要用來表示負數,所以整數中一半的數要用來表示負數,所以整數 的範圍在的範圍在 -32768-32768 ~~ 3276732767 之間。之間。 例如:例如: 2048020480 '' 數 介於值數 介於值 -32768-32768 ~~ 3276732767 之之 間,所以會存成整數型別間,所以會存成整數型別
  • 11. 長整數型別長整數型別  所佔用的空間是所佔用的空間是 4 bytes4 bytes 等於等於 3232 個位元個位元 (bit)(bit) 。。  可表示的整數個數有可表示的整數個數有 223232 =2=21616 ×2×21616 =65536×65536=65536×65536 ,, 是整數型別的是整數型別的 6553665536 倍。倍。  其數 範圍介於值其數 範圍介於值 -2147483648-2147483648 ~~ 21474836472147483647 之間,約之間,約 99 ~~ 1010 位數。位數。如果數 超過整數型值如果數 超過整數型值 別的容量,但可以放得進別的容量,但可以放得進 4 bytes4 bytes 裡面,則會被裡面,則會被 存成長整數型別,例如:存成長整數型別,例如: 25002500 '' 在整數範圍之內在整數範圍之內 ,, 所以存成整數型所以存成整數型 別別 5600056000 '' 超過整數範圍超過整數範圍 ,, 但是在長整數範圍但是在長整數範圍 之內之內 ,, 所以存成長整數型別所以存成長整數型別
  • 12. 精準度型別精準度型別 型型 別別 所佔所佔 空間空間 有效有效 位數位數 指數值指數值 範圍範圍 可表示的數 範圍值可表示的數 範圍值 倍倍 精精 準準 度度 8 bytes8 bytes 1515 位位 -324-324 ~~ 308308 負數:負數: -1.79E+308-1.79E+308 ~~ -4.94E-324-4.94E-324 正數:正數: 4.94E-3244.94E-324 ~~ 1.79E+3081.79E+308 單單 精精 準準 度度 4 bytes4 bytes 77 位位 -45-45 ~~ 3838 負數:負數: -3.4E+38-3.4E+38 ~~ -1.4E-45-1.4E-45 正數:正數: 1.4E-451.4E-45 ~~ 3.4E+383.4E+38
  • 13.  如果一個數 被表示成小數或浮點數,值如果一個數 被表示成小數或浮點數,值 VBVB 都會將都會將 它存成倍精準度型別。它存成倍精準度型別。  例如:例如: 56.39656.396 小數表示法,存成倍精準度型別小數表示法,存成倍精準度型別 1.8765E+651.8765E+65 浮點數表示法,存成倍精準度型別浮點數表示法,存成倍精準度型別 1000.01000.0 雖然等於整數雖然等於整數 10001000 ,但卻是小數,但卻是小數 表示法,依然存成倍精準度型別表示法,依然存成倍精準度型別 資料被存成倍精準度型別的情況一資料被存成倍精準度型別的情況一
  • 14. 資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二  如果是整數表示法,而其數 超過長整值如果是整數表示法,而其數 超過長整值 數範圍,該整數也會存成倍精準度型別數範圍,該整數也會存成倍精準度型別 ,例如:,例如: 98765432109879876543210987 ‘‘ 超過長整數範圍,超過長整數範圍, 存成倍精準度型別存成倍精準度型別
  • 15.  倍精準度型別的有效位數為倍精準度型別的有效位數為 1515 位,如果位,如果 數 表示法中的位數超過值數 表示法中的位數超過值 1515 位,位, VBVB 將將 會對多餘的位數採四捨五入法,例如:會對多餘的位數採四捨五入法,例如: Print 1.23456789012345678Print 1.23456789012345678 1.234567890123461.23456789012346 Print 987654321098765432Print 987654321098765432 9.87654321098765E+179.87654321098765E+17 資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (2)(2)
  • 16.  單精準度型別的有效位數有單精準度型別的有效位數有 77 位,但是當我們位,但是當我們 表示一個位數低於表示一個位數低於 77 位的實數時,位的實數時, VBVB 還是不還是不 會將該數 存成單精準度型別,例如:值會將該數 存成單精準度型別,例如:值 1.3351.335 會被存成倍精準度型別,是因為會被存成倍精準度型別,是因為 VBVB 內部作法內部作法 的關係,不是因為的關係,不是因為 1.3351.335 無法存成單精準度型無法存成單精準度型 別。別。 資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (3)(3)
  • 17.  我們可以主動要求我們可以主動要求 VBVB 將資料存成單精將資料存成單精 準度型別,方法是在數 後面加上 ‘值準度型別,方法是在數 後面加上 ‘值 !’!’ ,, 例如:例如: 1.335!1.335! 用用 !! 符號,要求符號,要求 VBVB 將將 1.3351.335 存存 成單精準度型別成單精準度型別 資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (4)(4)
  • 18.  當兩整數相除時,對當兩整數相除時,對 VB5VB5 來說,其結果也是存來說,其結果也是存 成單精準度型別,例如:成單精準度型別,例如: (( 不過對不過對 VB6VB6 來說,來說, 卻是存成倍精準度型別卻是存成倍精準度型別 )) Print 4/3Print 4/3 兩整數相除兩整數相除 VB5VB5 1.3333331.333333 Print 4/3Print 4/3 兩整數相除兩整數相除 VB6VB6 1.333333333333331.33333333333333 Print 4.0/3Print 4.0/3 這是倍精準數除以整數這是倍精準數除以整數 1.333333333333331.33333333333333 資料被存成倍精準度型別的情況二資料被存成倍精準度型別的情況二 (VB5 vs. VB6)(VB5 vs. VB6)
  • 20. VBVB 如何決定資料的型別如何決定資料的型別 如果是整數的表示法,依序判斷以下數 範圍:值如果是整數的表示法,依序判斷以下數 範圍:值 1.1. 數 介於值數 介於值 -32768-32768 ~~ 3276732767 之間,存成整數型別之間,存成整數型別 。。 2.2. 數 介於值數 介於值 -2147483648-2147483648 ~~ 21474836472147483647 之間,存之間,存 成長整數型別。成長整數型別。 3.3. 數 超過長整數範圍,存成倍精準度型別。值數 超過長整數範圍,存成倍精準度型別。值 4.4. 如果不是整數表示法,一律存成倍精準度型別。如果不是整數表示法,一律存成倍精準度型別。
  • 21. 利用利用 TypeNameTypeName 來檢驗來檢驗  Print TypeName(1024)Print TypeName(1024) IntegerInteger  Print TypeName(56000)Print TypeName(56000) LongLong  Print TypeName(10.98 )Print TypeName(10.98 ) DoubleDouble
  • 22. 告訴告訴 VBVB 我們希望儲存的我們希望儲存的 資料型別資料型別  Print TypeName(1.335!)Print TypeName(1.335!) Single ' VBSingle ' VB 果然將資料存成單精準度型別了果然將資料存成單精準度型別了
  • 23. 數 型別的型別宣告符號值數 型別的型別宣告符號值 型別宣告符號型別宣告符號 宣告之型別宣告之型別 %% 整數整數 && 長整數長整數 !! 單精準度單精準度 ## 倍精準度倍精準度
  • 24. 數 型別的型別宣告符號值數 型別的型別宣告符號值 ---- 例例 子子 1536&1536& '' 雖然雖然 15361536 只要存成整數型別只要存成整數型別 即即 可,但我們 利用可,但我們 利用 && 符號將它符號將它 宣宣 告成長整數型別告成長整數型別 48000#48000# '' 雖然雖然 4800048000 只要存成長整數型只要存成長整數型 別別 即可,但我們利用即可,但我們利用 ## 符號將它符號將它 宣宣 告成倍精準度型別告成倍精準度型別 123%123% ' 123' 123 原本就會存成整數型別,再原本就會存成整數型別,再 加上加上 %% 的的 整數型別宣告符整數型別宣告符 號,有號,有 點多餘,卻是正確的點多餘,卻是正確的
  • 26. 型別宣告的注意事項型別宣告的注意事項 ---- 例子例子 Print 100.0%Print 100.0% 錯誤錯誤 ,, 雖然雖然 100.0100.0 等於等於 100,100, 但這不是整數表示法但這不是整數表示法 ,, 不能宣告成整數型別。不能宣告成整數型別。Print 48000%Print 48000% 錯誤,將超過整數範圍的錯誤,將超過整數範圍的 4800048000 宣告成整數。宣告成整數。 Print 2.34567896!Print 2.34567896! 2.3456792.345679 位數位數 99 位的數 宣告成有值位的數 宣告成有值 效位效位 77 位的單精準度型別位的單精準度型別 ,多餘的兩位,多餘的兩位 (96)(96) 會被四會被四 捨五入。捨五入。
  • 28. 用用 TypeNameTypeName 來檢驗變數的型別來檢驗變數的型別 (( 11 )) A = 100A = 100 ? TypeName(A)? TypeName(A) IntegerInteger 將整數型別的將整數型別的 100100 指定給變數指定給變數 AA 檢 變數查檢 變數查 AA 的型別的型別 此時變數此時變數 AA 是整數型別是整數型別 A = "VB"A = "VB" ? TypeName(A)? TypeName(A) StringString 重新指定字串型別的重新指定字串型別的 "VB""VB" 給變數給變數 AA 變數變數 AA 的型別也變成了字串型別的型別也變成了字串型別
  • 29. 用用 TypeNameTypeName 來檢驗變數的型別來檢驗變數的型別 (( 22 )) L& = 65500L& = 65500 ? TypeName(L&)? TypeName(L&) LongLong 使用使用 && 符號將變數符號將變數 LL 宣告成長宣告成長 整整 數型數型 別別 長整數型別長整數型別L& = 100L& = 100 ? TypeName(L&)? TypeName(L&) LongLong 將整數型別的將整數型別的 100100 指定給指定給 LL 之之 後,後, ……
  • 30.  不定型不定型 (Variant)(Variant) 變數變數 ::變數未加型別宣告符號,其型別會隨著資料的內容變數未加型別宣告符號,其型別會隨著資料的內容 來改變。來改變。  定型定型變數:變數加了型別宣告符號,其型別固定,不會隨著指定給它的資變數:變數加了型別宣告符號,其型別固定,不會隨著指定給它的資 料來改變。料來改變。  每一個定型變數都屬於某一特定型別,例如每一個定型變數都屬於某一特定型別,例如 L&L& 是長整數型別是長整數型別 (( 因為最後因為最後 有有 && 符號符號 )) ,在指定資料時,它只接受可以轉成這個型別的資料。,在指定資料時,它只接受可以轉成這個型別的資料。  不定型變數的型別將隨著指定給它的資料來變,定型變數的型別則是永遠不定型變數的型別將隨著指定給它的資料來變,定型變數的型別則是永遠 不變不變。。 不定型變數與定型變數不定型變數與定型變數 (( 11 ))
  • 31.  L& = 34896L& = 34896 ' 34896' 34896 同樣是長整數型別,自然可接受同樣是長整數型別,自然可接受 L& = 100L& = 100 ' 100' 100 是整數型別,也可接受是整數型別,也可接受 L& = “VB”L& = “VB” '' 錯誤!字串 “錯誤!字串 “ VB”VB” 無法轉換成長整數無法轉換成長整數  L& = “82500”L& = “82500” '' 雖然 “雖然 “ 82500”82500” 是字串,但可以轉成是字串,但可以轉成 ? TypeName(L&)? TypeName(L&) '' 長整數,所以可接受長整數,所以可接受 LongLong '' 證明證明 LL 還是長整數還是長整數  L& = 9.8L& = 9.8 '' 將將 9.89.8 轉換成整數,只好四捨五入轉換成整數,只好四捨五入 Print L&Print L& 1010  L& = 7.85E+12L& = 7.85E+12 '' 錯誤錯誤 , 7.85E+12, 7.85E+12 超過長整數的數超過長整數的數 範圍值範圍值 不定型變數與定型變數不定型變數與定型變數 (( 22 ))
  • 32.  A = 34896A = 34896 '' 此時變數此時變數 AA 是「長整數」型別是「長整數」型別 A = 100A = 100 '' 變數變數 AA 變成了「整數」型別變成了「整數」型別 A = “VB”A = “VB” '' 變數變數 AA 又變成「字串」型別又變成「字串」型別 A = “82500”A = “82500” '' 變數變數 AA 還是「字串」型別還是「字串」型別 ? TypeName(A)? TypeName(A) StringString '' 證明變數證明變數 AA 還是字串還是字串  A = 9.8A = 9.8 '' 變數變數 AA 變成「倍精準度」型別變成「倍精準度」型別 Print APrint A 9.89.8 '' 沒有類似變數沒有類似變數 LL 四捨五入四捨五入 的情形的情形  A = 7.85E+12A = 7.85E+12 '' 變數變數 AA 還是倍精準度型別,還是倍精準度型別, 沒有類似變數沒有類似變數 LL 產生錯誤的情形產生錯誤的情形 不定型變數與定型變數不定型變數與定型變數 (( 33 ))
  • 34. DimDim 敘述敘述 (1)(1)  格式:格式:  使用例一:使用例一:  使用例二:使用例二: Dim 變數名稱 As 英文型別名稱 變數名稱 型別名稱 Dim S As String ' 將變數 S宣告成字串型別 Dim X As Date ' 將變數 X 宣告成日期時間型別 Dim A 省略了 "As 英文型別名稱 ", 則變數 A 將是一個不定型變數
  • 35. DimDim 敘述 – 注意事項敘述 – 注意事項  DimDim 敘述不能在即時運算視窗裡面使用敘述不能在即時運算視窗裡面使用 ,只能在程式視窗裡面使用,只能在程式視窗裡面使用。。
  • 36. DimDim 敘述敘述 (2)(2)  格式:格式: DimDim 變數名稱變數名稱 ++ 型別宣告符號型別宣告符號 Dim A% ' 將變數 A 宣告成整數型別 Dim S$ ' 將變數 S 宣告成字串型別 Dim V ' 未加型別宣告符號,表示不定型變數
  • 37. 固定長度字串固定長度字串  格式:格式:  例子:例子: Di m S As St r i ng * 80 指定字串的長度 Dim 字串變數名 As String * 字串長度
  • 38. Private Sub Command1_Click()Private Sub Command1_Click() Dim S1 As StringDim S1 As String ' S1' S1 是變動長度字串是變動長度字串 Dim S2 As String * 80Dim S2 As String * 80 ' S2' S2 是固定長度字串是固定長度字串 S1 = "abcde"S1 = "abcde" S2 = "12345"S2 = "12345" '' 利用利用 LenLen 計算字串的長度計算字串的長度 Print "S1Print "S1 長度長度 ="; Len(S1), "S2="; Len(S1), "S2 長度長度 ="; Len(S2)="; Len(S2) S1 = "abcdefghij"S1 = "abcdefghij" S2 = "1234567890"S2 = "1234567890" Print "S1Print "S1 長度長度 ="; Len(S1), "S2="; Len(S1), "S2 長度長度 ="; Len(S2)="; Len(S2) End SubEnd Sub 固定長度字串 – 實例固定長度字串 – 實例 (1)(1)
  • 39.  上一頁程式輸出結果:上一頁程式輸出結果: S1S1 長度長度 = 5= 5 S2S2 長度長度 = 80= 80 S1S1 長度長度 = 10= 10 S2S2 長度長度 = 80= 80 可見固定長度字串的長度是固定的,不可見固定長度字串的長度是固定的,不 會隨著字串的內容而改變其長度。會隨著字串的內容而改變其長度。 變動長度字串則會隨著字串的內容而改變動長度字串則會隨著字串的內容而改 變其長度。變其長度。 固定長度字串 – 實例固定長度字串 – 實例 (2)(2)
  • 40. 型別宣告的限制型別宣告的限制 (1)(1)  一個變數一旦宣告成某種型別以後,就不能在後面一個變數一旦宣告成某種型別以後,就不能在後面 的敘述中又重新宣告它的型別,例如:的敘述中又重新宣告它的型別,例如: L& = 100 'L& = 100 ' 已經將變數已經將變數 LL 宣告成宣告成長整數長整數型別型別 L% = 100L% = 100 '' 錯誤!企圖將變數錯誤!企圖將變數 LL 重新宣告為重新宣告為 整數整數型別型別
  • 42. 常數符號常數符號  數學上的圓周率數學上的圓周率 π(π( 讀成讀成 pi)pi) ,, ππ 就是就是 3.1415933.141593 這個常數的這個常數的常數符號常數符號。。 S = pi * R ^ 2 S = 3.141593 * R ^ 2 運算式中放的是 常數符號 運算式中放的是 常數值
  • 43.  格式:格式: ConstConst 常數名稱常數名稱 == 常數表示法常數表示法 ConstConst 常數名稱常數名稱 AsAs 型別名稱型別名稱 == 常數表示法常數表示法 ConstConst 常數名稱常數名稱 ++ 型別宣告符號型別宣告符號 == 常數表示法常數表示法  例子:例子: Const pi = 3.141593Const pi = 3.141593 Const ver = "6.0Const ver = "6.0 中文版中文版 "" Const noon = #12:00:00#Const noon = #12:00:00# Const pi As Double = 3.141593Const pi As Double = 3.141593 Const pi# = 3.141593Const pi# = 3.141593 常數符號的定義常數符號的定義
  • 45. 不同型別資料的轉換與運算不同型別資料的轉換與運算 I% = "123"I% = "123" 雖然雖然 I%I% 是整數型別,而是整數型別,而 "123""123" 是字串型別, 但是字串型別, 但 "123""123" 的內容完全是數 ,所以值的內容完全是數 ,所以值 VBVB 會自動 將會自動 將 "123""123" 轉成轉成 123123 再再 指定給指定給 I%I% S$ = 123S$ = 123 VBVB 會自動將會自動將 123123 轉成轉成 "123""123" 再指定給字串型別的再指定給字串型別的 S$S$ 。。 ? #9:30# > "8:30"? #9:30# > "8:30" VBVB 在進行比較運算以前,會在進行比較運算以前,會 先將字串型別的先將字串型別的 "8:30""8:30" 轉成轉成 日期時間型別的日期時間型別的 #8:30##8:30# ,所,所
  • 46. I% = "123A"I% = "123A" 字串裡含有非數字的字元字串裡含有非數字的字元 'A''A' ,所以字串 無法轉成,所以字串 無法轉成 數 ,會產生錯誤值數 ,會產生錯誤值 不同型別資料的轉換與運算不同型別資料的轉換與運算 ---- 錯誤錯誤 例例
  • 47. 字串與數 的運算值字串與數 的運算值 (1)(1)  數 型字串必須是內容符合數 表示法的字值 值數 型字串必須是內容符合數 表示法的字值 值 串,反之,則為文字型字串,例如:串,反之,則為文字型字串,例如: "3600""3600" "73.59""73.59" "1.5E-13""1.5E-13" '' 以上三個字串皆為數 型字串值以上三個字串皆為數 型字串值 "123 6""123 6" '' 含有非數字的空白字元,屬於文字型字串含有非數字的空白字元,屬於文字型字串 "#1005""#1005" '' 含有非數字的含有非數字的 '#''#' 字元,屬於文字型字串字元,屬於文字型字串
  • 48. Print "123" + "ABC"Print "123" + "ABC" 123ABC123ABC 當數 型字串與字串在一起做值當數 型字串與字串在一起做值 運算時,數 型字串仍維持字值運算時,數 型字串仍維持字值 串特性,所以運算符號串特性,所以運算符號 '+''+' 被被 視為字串的串接。視為字串的串接。 Print "123" + 100Print "123" + 100 223223 當數 型字串與數 在一起做值 值當數 型字串與數 在一起做值 值 運算時,數 型字串被當作數值運算時,數 型字串被當作數值 ,所以運算符號值,所以運算符號值 '+''+' 被視為被視為 數 的相加。值數 的相加。值 Print "123" + "100"Print "123" + "100" 123100123100 當兩個數 型字串在一起運算值當兩個數 型字串在一起運算值 時,兩個數 字串都維持字串值時,兩個數 字串都維持字串值 特性,所以運算符號特性,所以運算符號 '+''+' 還是還是 字串與數 的運算值字串與數 的運算值 (2)(2)
  • 49. I% = "55"I% = "55" A = "55"A = "55" "55""55" 指定給整數的指定給整數的 I%I% ,會被,會被 轉成整數轉成整數? "10" + I%? "10" + I% 6565 變數變數 II 是整數型別,所以是整數型別,所以 "10""10" 被視為數值被視為數值? "10" + A? "10" + A 10551055 AA 是不定型變數,而其內容為是不定型變數,而其內容為 "55""55" ,所以,所以 "10""10" 維持字串本維持字串本 性性 字串與數 的運算值字串與數 的運算值 (3)(3)
  • 50. 不同精準度的數 運算值不同精準度的數 運算值 (1)(1)  將高精準度的資料存入低精準度的變數將高精準度的資料存入低精準度的變數 時,將採四捨五入的方法將資料轉換成時,將採四捨五入的方法將資料轉換成 較低的精準度。例如:較低的精準度。例如: I% = 22.6I% = 22.6 Print I%Print I% 2323
  • 51.  將高精準度的資料存入低精準度的變數將高精準度的資料存入低精準度的變數 時,轉換後的數 不能超過低精準度型值時,轉換後的數 不能超過低精準度型值 別的數 範圍,例如:值別的數 範圍,例如:值 不同精準度的數 運算值不同精準度的數 運算值 (2)(2) I% = 32767.6‘ 錯誤, 32767.6 轉換成整數後變成 ' 32768 ,超出整數的範圍。
  • 52.  當運算符號兩邊出現不同精準度的數 資料時值當運算符號兩邊出現不同精準度的數 資料時值 VBVB 會以其中精準度較高者為準,將另一邊的會以其中精準度較高者為準,將另一邊的 數 換算成較高之精準度後再運算,運算之結值數 換算成較高之精準度後再運算,運算之結值 果也以較高之精準度表示。例如:果也以較高之精準度表示。例如: 不同精準度的數 運算值不同精準度的數 運算值 (3)(3) D# = 7 Print D#/6 ' 運算式以倍精準度處理 1.16666666666667 I% = 7 N! = 6 Print I%/N! ' 運算式以單精準度處理 1.166667
  • 53. 小心小心 ! 0.5! 0.5 的四捨五入的四捨五入 I1% = 1.5 ‘ 都會被四捨五入成為整數 I2% = 4.5 ? I1%, I2% ’ 我們預期的結果是 2 跟 5 2 4 ‘ 但執行的結果卻是 2 跟 4 I1% = 1.5 ’ 被捨棄的 0.5 前一位是奇數,所以進位 I2% = 4.5 ‘ 被捨棄的 0.5 前一位是偶數,所以捨棄 I% = 4.5001 ' 被捨棄的 5001 不是剛好等於 5 ,所以與我們 ? I% ' 過去的習慣一樣,直接進位。 5
  • 54. 避免數 運算時的溢位錯誤值避免數 運算時的溢位錯誤值  I% = 32770I% = 32770 ' 32770' 32770 超過整數的範圍超過整數的範圍 (-32768(-32768 ~~ 32767),32767), 所以產生所以產生溢位溢位的錯誤的錯誤  可能發生溢位錯誤的例子:可能發生溢位錯誤的例子: D# = I% * 256D# = I% * 256  修正:修正: D# = I% * 256&D# = I% * 256&