• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Về hàm định dạng Format

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 506 time

Về hàm định dạng Format

Gửi bàigửi bởi truongphu » CN 15/04/2012 6:30 pm

Tên bài viết: Về hàm định dạng Format
Tác giả: truongphu
Cấp độ bài viết: mới lạ
Tóm tắt: phát triển thêm các đối số của hàm


A- Mục A nầy chúng ta nhắc lại các kiến thức quen thuộc.

Hàm Format hay Format$ có cấu trúc: <Đối tượng chịu format>, <định dạng Format>
Sẽ trả về một giá trị String.

Mã: Chọn hết

MsgBox TypeName(Format(123, "#"))

Để đào sâu vấn đề, chúng ta chỉ chú trọng đối tượng chịu format là các con số, các đối tượng khác chỉ lướt hay bỏ qua.

A-1 Từ khóa ‘#’ trong định dạng.

# là phần NGUYÊN của đối tượng chịu format được làm tròn.
.# là phần thập phân của đối tượng chịu format được làm tròn.

Vậy khi <Đối tượng chịu format> là số Single hay Double, với #, ta thu được CHUỖI NGUYÊN làm tròn của số Single hay Double

Mã: Chọn hết

MsgBox Format(1235797875475.58, "#")

Có kết quả là 1235797875476

Bạn chú ý từ dùng: CHUỖI NGUYÊN của số Single hay Double
Nghĩa là kết quả trả về là String (chuỗi) và chỉ có phần nguyên làm tròn.
Và chuỗi 1235797875476 có giá trị số lớn hơn kiểu biến Long.
Tùy tình huống làm tròn mà kết quả trả về lớn hơn, bằng hay nhỏ hơn đối tượng chịu format

Mã: Chọn hết

MsgBox Format(475.58, "#.##")

Có kết quả là 475.58

Ở ví dụ trên. Phần nguyên (trước dấu chấm), ta viết nhiều từ khóa # là vô nghĩa, ví dụ sau đây không cần thiết:
MsgBox Format(475.58, "####.##")

Khi và chỉ khi muốn kết quả có ký hiệu String khác ở đầu chuỗi, ta mới viết một loạt dấu #; ví dụ:

Mã: Chọn hết

MsgBox Format(475.58, "0###.##")

kết quả là 0475.58

Mã: Chọn hết

MsgBox Format(475.58, "AB###.##")

kết quả là AB475.58
[Tổng các ký tự định dạng phải lớn hơn tổng các ký tự mà phần nguyên làm tròn thể hiện]

Riêng phần thập phân, từ khóa .# sẽ lấy số thập phân được làm tròn

Mã: Chọn hết

MsgBox Format(475.58, "#.#")

Kết quả là 475.6

Vì số 475.58 có 2 số thập phân, việc ghi nhiều hơn 2 dấu # trong trường hợp nầy là vô nghĩa, ví dụ sau đây không cần thiết:
MsgBox Format(475.58, "#.####")

Khi và chỉ khi muốn kết quả có ký hiệu String khác ở cuối chuỗi, ta mới viết một loạt dấu #; ví dụ:

Mã: Chọn hết

MsgBox Format(475.58, "#.##0")

kết quả là 475.580

Mã: Chọn hết

MsgBox Format(475.58, " #.##CD")

kết quả là 475.58CD
[Tổng các ký tự định dạng phải lớn hơn tổng các ký tự mà phần thập phân làm tròn thể hiện]


A-2 Từ khóa ‘0’ trong định dạng.
0 có 2 ý nghĩa: ý nghĩa String và ý nghĩa số
- Ý nghĩa số: 0 dùng thay cho # và kết quả hoàn toàn tương đồng.

Mã: Chọn hết

MsgBox Format(475.58, "0.0")

Kết quả là 475.6
- Ý nghĩa String, như có đề cập trên, ta muốn có thêm nhiều số 0 ở đầu hay ở cuối số thập phân

Mã: Chọn hết

MsgBox Format(475.58, "0000.0000")

kết quả là 0475.5800

Ta thấy ký tự 0 đầu tiên hoàn toàn là String = bắt buộc phải có!, 3 ký tự 0 tiếp theo là ý nghĩa số, chúng đại diện tùy ý cho 475, tương đương ký tự #. Với 4 ký tự tiếp theo ở phần thập phân, 2 ký tự trước có ý ngĩa số, đại diện cho 58 và 2 ký tự 0 cuối cùng hoàn toàn là String= bắt buộc phải có.

B- Mục B nầy giới thiệu format modern, chưa có trong sách vở, kể cả của MS.

B1- Format có String ở trước (hay ở sau) với dãy số nguyên:
Thay vì viết:

Mã: Chọn hết

MsgBox Format(2012, "AB####")

Để có AB2012
Bạn hãy viết:

Mã: Chọn hết

MsgBox Format(2012, "AB#")

Cũng cùng kết quả AB2012

Rõ ràng dấu # đã thay thế đủ 2012

Tương tự, ta có thể viết:

Mã: Chọn hết

MsgBox Format(2012, "AB#CD")

Với kết quả là AB2102CD

Đương nhiên ký tự 0 hoàn toàn tương đương #

Mã: Chọn hết

MsgBox Format(2012, "AB0CD")

Với kết quả là AB2102CD

B2- Tách chuỗi số:
20124 có nghĩa là năm 2012 tháng 4 hay lần thứ 4 gì đó. Bạn muốn tách 2 cụm nầy:

Mã: Chọn hết

MsgBox Format(20124, "# #")

Với kết quả là 2102 4
Hoặc:

Mã: Chọn hết

MsgBox Format(20124, "#T#")

Với kết quả là 2102T4

Ta thấy ký tự space hay ký tự khác chia kiểu định dạng trước sau, sau có bao nhiêu dấu # là bấy nhiêu ký tự muốn tách, trước với chỉ một dấu # đại nhiện cho nhóm số còn lại

52012 có nghĩa là tháng 5 hay lần thứ 5 gì đó ở năm 2012. Bạn muốn tách 2 cụm nầy:

Mã: Chọn hết

MsgBox Format(52012, "# ####")

Với kết quả là 5 2102
Hoặc:

Mã: Chọn hết

MsgBox Format(52012, "#Z####")

Với kết quả là 5Z2102

Chú ý tránh các ký tự đại biểu thời gian đã quy định: H, M, N, S, D, Y, W,C

Đương nhiên ký tự 0 hoàn toàn tương đương #

Mã: Chọn hết

MsgBox Format(20124, "0T0")

Với kết quả là 2102T4

B3- Từ khóa @
B3a-
@ đứng một mình đại diện cho nguyên xi đối tượng bị Format. Ta xem 2 ví dụ sau:

Mã: Chọn hết

MsgBox Format("052012.642", "#")

Cho kết quả số làm tròn là 52013; mà:

Mã: Chọn hết

MsgBox Format("052012.642", "@")

Cho kết quả là đối tượng bị format: 052012.642

B3b-
Tại mục B2 Tách chuỗi số, số ký tự muốn tách ở vế phải, do đó 52012 (tháng 5 năm 2012) được tách với việc gõ nhiếu dấu #:

Mã: Chọn hết

MsgBox Format(52012, "# ####")

Với kết quả là 5 2102

Bây giờ, bạn thay với dấu @:

Mã: Chọn hết

MsgBox Format(52012, “@ @")

Ta có ngay kết quả là 5 2102
Nhẹ nhàng hơn phải không? Hóa ra khi tách số, ký hiệu # và @ hoạt động đối nhau, số ký tự # tách ở bên phải; trong khi số ký tự @ tách ở bên trái.

Với (tháng 11 năm 2012) 112012, ta sẽ viết:

Mã: Chọn hết

MsgBox Format(112012, “@@ @")

Thay vì viết:

Mã: Chọn hết

MsgBox Format(112012, “# ####")


Bên cạnh việc tách số đối nhau, như đã nói, # là số nguyên làm tròn, trong khi @ là chính đối tượng bị format. Xem ví dụ:

Mã: Chọn hết

   MsgBox Format("052012.642", "# ##")

Số nguyên làm tròn là 52013, tách bên phải 2 ký tự, kết quả là 520 13

Mã: Chọn hết

   MsgBox Format("052012.642", "@@ @")

Tách bên trái 2 ký tự: 05 2012.642

B3c-
Ta đã có tách bên trái 1 ký tự với:

Mã: Chọn hết

MsgBox Format(52012, “@ @")

Bây giờ ta viết:

Mã: Chọn hết

MsgBox Format(52012, “@ ")

Kết quả vẫn là 5 2012
Vậy thì cách dùng từ khóa @ càng gọn! từ khóa # làm như vậy không được nghen!

Nói lại, với tách ký tự bên trái dùng @, ta chỉ viết nhóm số ký tự @ và một space là xong.

Việc tách thành nhiều nhóm với nhiều space (hay ký tự khác [ngoài từ khóa về thời gian]) thì 2 từ khóa @ và # không khác nhau mấy ngoài việc # là số nguyên làm tròn và @ là nguyên gốc.

4- Từ khóa &
Tôi test thấy từ khóa & cũng giống từ khóa @
Chưa phát hiện gì đặc biệt!

5- Hỗn hợp các từ khóa.
0 và # là tương đồng; hỗn hợp không có gì khác biệt ngoài vấn đề ký tự 0 quy định phải có bao nhiêu ký tự 0 (String) ở đầu hay ở cuối của kết quả format. Xem mục A1 và A2

@ và & là tương đồng, việc phối hợp 2 ký tự nầy vẫn cho kết quả như khi dùng một ký tự.

# (hay 0) và @ (hay &)
Tùy theo khóa # đứng trước hay khóa @. Khóa đứng sau xem như String

Mã: Chọn hết

MsgBox Format("1234", "#@")

Cho kết quả là 1234@ = dễ hiểu

Mã: Chọn hết

MsgBox Format("1234", "@#")

Cho kết quả là 1#234
Giải thích: @ một mình cho kết quả 1234
Nhưng @ kèm ký tự khác (hoặc space) sẽ có ý nghĩa tách nhóm; xem cuối mục B3c Từ khóa @.


Hay Không? :> B-)


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
TheAngelInMyLove
Thành viên danh dự
Thành viên danh dự
Bài viết: 232
Ngày tham gia: T.Sáu 08/05/2009 11:41 pm
Đến từ: Dầu Tiếng - Bình Dương
Has thanked: 10 time
Been thanked: 38 time
Liên hệ:

Re: Về hàm định dạng Format

Gửi bàigửi bởi TheAngelInMyLove » T.Bảy 21/04/2012 4:11 am

Chúc bác càng ngày càng có thêm nhiều bài viết ý nghĩa.
0965924444 ai rảnh hú mình đi cafe nha, mình Q7

KIDLINUX
Thành viên chính thức
Thành viên chính thức
Bài viết: 12
Ngày tham gia: T.Năm 27/03/2008 10:52 am
Has thanked: 7 time

Re: Về hàm định dạng Format

Gửi bàigửi bởi KIDLINUX » T.Ba 16/10/2012 11:22 am

Đang hạn gặp trời mưa :)
Đang tìm mấy hôm nay về các hàm này
Thanks bác lần nữa.


Quay về “[VB] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách