470 likes | 573 Views
新觀念的 VB6 教本. 第5章 資料與運算. 5-1 資料的表示法. 資料的表示法. 數值資料 — 整數、實數、科學記號 字串資料 日期時間資料 布林資料. 整數. 十進位的表示法 : 逗號是不能使用的,如10,000 。 十六進位數的表示法 :前面加上 & H 八進位數的表示法 :前面加上 & 或 & O( 字母 O)
E N D
新觀念的 VB6 教本 第5章 資料與運算
資料的表示法 • 數值資料 — 整數、實數、科學記號 • 字串資料 • 日期時間資料 • 布林資料
整數 • 十進位的表示法:逗號是不能使用的,如10,000。 • 十六進位數的表示法:前面加上&H • 八進位數的表示法:前面加上 & 或 &O(字母O) 100 100的十進位表示法&H64 100的十六進位表示法&144 100的八進位表示法&O144 也是100的八進位表示法 十六進位是 64((64)16=6×161+4×160=100 八進位是 144((144)8 =1×82+4×81+4×80=100
實例練習(p.136) 寫一程式讓使用者輸入十進位數,然後顯示出其十六進位及八進位數。
實例練習 -- Hex 及 Oct 函數 • 想要將十進位數表示成十六進位數及八進位數,並不需要自己寫程式進行轉換,VB 所提供的 Hex 及 Oct 函數,就可以幫我們做好這件事情,例如: Print Hex(100)64 Print Oct(100)144
實例練習 – 程式撰寫 • 在表單上佈置一命令鈕,然後撰寫以下程式: Private Sub Command1_Click() A = Val(InputBox(“輸入一十進位數”)) MsgBox "十六進位數 = &H" & Hex(A) & vbCrLf & "八進位數 = &O" & Oct(A) End Sub
實數 • 小數方面,VB的表示法也跟數學完全相同,如3.14159、0.0016、-8000.5等均為正確的寫法。 • VB並沒有分數的表示法,不過我們可以用除號 ‘/’ 把分數的意義表達出來,例如把 寫成1/3 ,只是1/3經運算後得到的值為0.3333333,並不完全等於,這是電腦的限制,沒辦法的事情。
實數 -- 科學記號 • 一般科學記號表示法 說明9750000000 = 9.75×109將小數點左移9位,得到9.75,再乘以1090.00000056 = 5.6×10-7將小數點右移7位,得到5.6,再乘以10-7 • VB 使用算術運算符號表達,例如:9.75×109 表達成 9.75*10^95.6×10-7 表達成 5.6*10^-7 * 代表乘號, ^ 代表次方符號。
實數 -- 浮點數表示法 科學記號中的「有效數字」及「指數」 例如:
字串資料 • 以 “” 括起來的文數字都算是字串,如: "RUN!PC""Address #83""1998""12+75=?""旗標資訊月刊" Print "RUN!PC" ' 放到記憶體時, 兩邊的雙引號會被去掉, RUN!PC ' 所以輸出時也就沒有雙引號了。
字串資料 -- 如果雙引號裡面又有雙引號 • VB 規定字串中的雙引號要用兩個雙引號來表示,例如: Print "ABC"xyz" ' VB 以為 "ABC"xyz" 中的 "ABC" 是字串, ABC ' 所以輸出了 ABC。
日期時間資料 • 必須用 ## 括起來 • #9:30# 表示上午9點30分 • #1997/12/31# 表示1997年12月31日 • 輸出時,VB一律使用「系統的日期格式」,並且去掉 ## 再輸出,例如: • Print #28 Feb 1998# 1998/2/28
標準的日期表示法 • 標準的日期表示法是 #西元年/月/日#,例如: #1997/7/1# 表示 西元 1997 年 7 月 1 日#2005/12/31# 表示 西元 2005 年 12 月 31 日 • 西元年從1930到2029可以簡寫成30到99及00到29: • #89/7/1# 等於 #1989/7/1#。
非標準的日期表示法 • 如果不是標準日期表示法,VB 也會做智慧的判斷,例如以下的寫法都表示 #1997/2/28#(1997年2月28日): #2 28 97##97 2 28##28 Feb 1997##February 28, 1997#
系統的日期格式(1) • 同樣是 #1998/2/28#,可能有些人的機器輸出了「1998/2/28」,但也可能有些人的機器輸出了「2/28/1998」,這是因為VB 採用系統的日期格式來輸出資料,而系統的日期格式又可以使用以下方法來進行設定:
系統的日期格式(2) 以上圖為例,所設定的日期格式為 "MM/dd/yyyy", 所以 #1998/2/28# 將會被輸出成「02/28/1998」。
錯誤的日期表示法 • 不存在的日期及中文日期,VB 是不接受的,所以: • #1997/13/29# 錯誤, 月份 13 超過範圍#1997/2/29# 錯誤, 1997年不是閏年, 2月只有 28天#1997 年 7 月 1 日# 錯誤,中文日期
標準的時間表示法 • 標準的時間表示法是 #時:分:秒AM# 及 #時:分:秒PM#,其中 AM 表示上午,PM 表示下午,例如: • #9:30:00 AM# 表示 上午 9 點 30 分#7:55:30 PM# 表示 下午 7 點 55 分30 秒
非標準的時間表示法 • 如果不是上述的標準時間表示法,VB 也會做智慧的判斷,例如: • #9 A# 等於 #9:00:00 AM##17:3# 等於 #5:03:00 PM#
錯誤的時間表示法 • 輸入時間時,有效的時分秒分別是:時:0~23、分秒:0~59,所以下面的表示法是錯誤的: • #24:00:00# 錯誤, '時' 超過 23#17:60:00# 錯誤, '分' 超過 59#12:00:-1# 錯誤, '秒' 是負數
VB 如何輸出時間? • 輸出時間時,VB 也一律採用系統的時間格式來輸出,同樣會去掉 ##,例如: Print #17:30:50#PM 05:30:50 時間的輸出也一律使用系統的時間格式,並且去掉##
系統的時間格式(1) 同樣是 #17:50:30#,可能有些人的機器輸出了「17:50:30」,但也可能有些人的機器輸出了「PM 05:50:30」,這是因為 VB 採用系統的時間格式來輸出資料,而系統的時間格式又可以使用以下方法來進行設定:
系統的時間格式(2) 以上圖為例,所設定的時間格式為 “tt hh:mm:ss”,所以 #17:50:30# 將會被輸出成「PM 05:50:30」。(註:時間格式中的 “tt”表示以 AM 來表示上午、以 PM 來表示下午)
時間的注意事項 • ‘0 時’VB 將它表示成 #12:00:00 AM#,而 ‘12 時’ 則是 #12:00:00 PM#,所以: Print #0:30:0#AM 12:30:00 Print #12:00:00#PM 12:00:00 • 時間的表示法中也可以把日期涵蓋進來,例如 #1997/2/28 5:03:00 PM# 即表示1997年2月28日, 下午5點零3分。
布林資料 • 布林資料指的是「真」與「假」的集合,又稱「真假資料」。 • 「真」以 True 表示,「假」以 False 表示。 • 布林資料常用來代表一個條件式的成立與否,例如: ? 2 > 1 ' 利用即時運算視窗詢問 VB:「2 > 1嗎?」True ' VB 回答:「真的」? 2 < 1 ' 再問:「2 < 1 嗎?」False ' VB 回答:「假的」
字串與字串的串接 • 字串與字串的串接就是把兩個字串連接成為一個新的字串,其運算符號是加號 ‘+’。例如: First = "Peter"Last = "Wang"Print First + " " + LastPeter Wang
串接運算的注意事項 • ‘+’ 號用在字串與字串之間叫做「串接運算」,用在數值與數值之間叫做「算術運算」,例如: ? 50 + 20 ' 算術運算 70? "50" + "20" ' 串接運算5020
各種類型資料的串接 • ‘&’是串接用的運算符號,在 ‘各種類型資料’ 的串接 • S1 = "Today is "D = #8/24/97#S2 = S1 & D ' 字串與日期的串接Print S2Today is 1997/8/24 • Print “12345.” & 678 ‘字串與數值串接後,直接印出12345.678 • Print 678 & 0.12345 ‘數值與數值的串接6780.12345 • X = "VB" + 4.0 ' 錯誤!'+' 號只能用來串接字串與字串
比較運算 比較 ‘運算符號’ 兩邊的數值後,傳回 True 或 False
比較運算 – 例子 • Print 1 > 2False • B = 1 <> 2Print BTrue
日期時間的比較(1) • 時間的比較,後面的時間大於前面的時間:#9:30# 大於 #8:30# • 但 #12:00:00 AM# 被視為 ‘0 時’,而 #12:00:00 PM# 被視為一天的中午 12 時,所以:#12:30:00 PM# 小於 #1:00:00 PM# • 日期的比較中,後面的日期大於前面的日期:#1997/7/1# 大於 #1997/1/1# • 00~99年表示2000~2029及1930~1999年,所以:#97/1/1# 大於 #1899/12/31#。
日期時間的比較(2) • 同時涵蓋日期及時間的比較中,先比較日期再比較時間,例如: #97/1/1 0:00:00# 大於 #96/12/31 23:59:59##97/1/1 3:00:00# 大於 #97/1/1 0:00:00# • 如果一方有日期,一方沒有日期,則將沒有日期那一方的日期視為 #1899/12/30#,例如 #0:00:00# 相當於 #1899/12/30 0:00:00#,所以: #0:00:00# 大於 #1899/12/29 23:59:59# • 如果一方有時間,一方沒有時間,則將沒有時間那一方的時間視為 #0:00:00#,所以: #97/1/1# 小於 #97/1/1 0:0:1#
字串的比較 • 比較的依據是字元的字元碼 。 • 比較方式是從每個字串的第一個字元開始依次比較其字元碼,直到比較出大小為止。 • 如果未比較出大小,而某一個字串已先達到最後一個字元,則長度較小的字串小於長度較大的字串。
知道字元碼的方法 • 英文範圍(0~127)內的字元:利用即時運算視窗執行 ? ASC("字元")。 • 中文字(包含兩個 byte):利用即時運算視窗執行 ? ASC(“中文字”) + 65536。 • 例如: ? ASC("A") 65 ' 字元 A 的字元碼等於 65? ASC("B") 66 ' 字元 B 的字元碼大於 A? ASC("程") + 65536 46459 ' 中文字 '程' 的字元碼等於46459
判斷出字元的大小的規則 • 英文字母順序在前者,其字元碼較小,例:"a" < b"。 • 小寫字母 "大於" 大寫英文字母,例:"a" > "A"。 • 數字 "小於" 英文字母,例:"2" < "A"。 • 中文字 "大於" 英文字母,例:"程" > "a"。 數字字元<英文大寫字母<英文小寫字母<中文字
真值表:T 代表 True,F 代表 False Print True Or FalseTrue Print 4 > 3 And 1 > 4False 4 > 3 And 1 > 4=True And False=False
邏輯運算的對象 • Not 2 > 1 Not 是以 2 > 1 這個比較運算式作為 運算的對象 • Not 2 > 1先求比較運算式的結果,= Not True再進行邏輯運算= False
算術運算<優先於>字串運算<優先於>比較運算<優先於>邏輯運算算術運算<優先於>字串運算<優先於>比較運算<優先於>邏輯運算 所以這個運算式: 20 >= 10 And 3^2 <= 3*2算術運算,最優先= 20 >= 10And 9 <= 6比較運算,次之= True And False 邏輯運算,最後= False
同一運算式中有優先順序相同的運算符號時,則運算順序是自左而右同一運算式中有優先順序相同的運算符號時,則運算順序是自左而右 12 / 3 * 2 = 4 * 2= 8 如果我們想改變運算順序,可以使用左右括弧 12 / (3 * 2)= 12 / 6= 2