• 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

Lấy phần thập phân

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 time
Liên hệ:

Lấy phần thập phân

Gửi bàigửi bởi hoangthu1974 » T.Bảy 17/01/2009 4:13 pm

Thủ thuật: Lấy phần thập phân
Tác giả: Hoàng Thư
Mô tả: Lấy phần thập phân của một số


Cách thường dùng cũ

Mã: Chọn hết

  1. Function GetDecimal(ByVal i As Double) As Double
  2.     GetDecimal = i - Fix(i)
  3. End Function

Cách này sẽ cho ra số không đúng vì GetDecimal(9,3) = 0,300000000000001

Mã: Chọn hết

  1. Function GetDecimal(ByVal i As Double) As Double
  2.     GetDecimal = Right(Str(i), Len(Str(i)) - InStr(Str(i), "."))
  3.     GetDecimal = GetDecimal / (10 ^ Len(Trim(Str(GetDecimal))))
  4. End Function

Cách này sẽ chính xác hơn.



Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4760
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Lấy phần thập phân

Gửi bàigửi bởi truongphu » T.Bảy 17/01/2009 8:08 pm

1- Hoan ngênh anh HoangThu1977 đóng góp
2- Công thức trên chưa tổng quát
vd:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. MsgBox GetDecimal(0.0005)
  3. End Sub
  4. Function GetDecimal(ByVal i As Double) As Double
  5.     GetDecimal = Right(Str(i), Len(Str(i)) - InStr(Str(i), "."))
  6.     GetDecimal = GetDecimal / (10 ^ Len(Trim(Str(GetDecimal))))
  7. End Function

Có kết quả là 0,5 !

@HoangThu1977: Có cần tôi viết lại function trên hông? (Tôi luôn luôn ngiêm túc trong công việc = trả lới thư anh)
:D

TB: Mời các bạn tham khảo các bài viết của truongphu, đấy là mẫu mực, đấy là uy tín của 'thương hiệu'
Giám Sát Thư mục
Color Dialog
Bảo vệ thư mục
Kéo file hình thả vào PictureBox
Menu_Columns_Demo
[b=]Di chuyển control lúc runtime [/b]
ListBox chuẩn có nhiều cột
EbExecuteLine : bổ sung bài trong VBLib
Tách số Long ra byte và ứng dụng
Sửa lần cuối bởi truongphu vào ngày T.Bảy 17/01/2009 8:21 pm với 2 lần sửa.
o0o--truongphu--o0o

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

Hình đại diện của người dùng
CoffeeShop
Thành viên trung thành
Thành viên trung thành
Bài viết: 209
Ngày tham gia: CN 11/01/2009 11:25 pm
Has thanked: 2 time
Been thanked: 2 time

Re: Lấy phần thập phân

Gửi bàigửi bởi CoffeeShop » T.Bảy 17/01/2009 8:16 pm

Mã: Chọn hết

  1. Private Sub Form_Load()
  2.     MsgBox GetDecimal(0.0005) ' ra kết quả 0005
  3. '// nếu muốn trả về kết quả là kiểu số thì dùng thêm hàm Val
  4.     MsgBox Val(GetDecimal(0.0005)) ' ra kết quả 5
  5. End Sub
  6.    
  7. Function GetDecimal(ByVal i As Double) As String ' thay kiểu double = string
  8.     GetDecimal = Right(Str(i), Len(Str(i)) - InStr(Str(i), "."))
  9. End Function

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: Lấy phần thập phân

Gửi bàigửi bởi anhtuyenbk » T.Bảy 17/01/2009 9:46 pm

Lâu lắm rồi ko đụng tới VB6, hôm nay ôn lại vậy.

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2.     MsgBox (GetDecimal(1.00005))
  3. End Sub
  4. Public Function GetDecimal(ByVal number As Double) As Double
  5.     GetDecimal = Mid(CStr(number), InStr(CStr(number), "."))
  6. End Function
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
T7
Thành viên danh dự
Thành viên danh dự
Bài viết: 415
Ngày tham gia: T.Năm 24/05/2007 8:19 pm
Đến từ: Long Xuyên - An Giang
Been thanked: 12 time
Liên hệ:

Re: Lấy phần thập phân

Gửi bàigửi bởi T7 » CN 18/01/2009 10:01 am

hoangthu1974 đã viết:

Mã: Chọn hết

  1. Function GetDecimal(ByVal i As Double) As Double
  2.     GetDecimal = i - Fix(i)
  3. End Function

Cách này sẽ cho ra số không đúng vì GetDecimal(9,3) = 0,300000000000001

Sửa đoạn code trên lại một chúc là được rồi :D

Mã: Chọn hết

  1. Function GetDecimal(ByVal i As Double) As Double
  2.     GetDecimal = Format(i - Fix(i), "0.00000000000000") 'Biến double có thể chứa được 14 chữ số thập phân phía sau dấu phảy thôi, từ số thứ 15 trở lên sẽ bị làm tròn (Giống như cái kết quả của anh ở trên đấy), vậy nên ta phải format cho nó hiện 14 chữ số thập phân phía sau thì mới không gặp trường hợp như ở trên.
  3. End Function
While (i <= you) i++;

Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 time
Liên hệ:

Re: Lấy phần thập phân

Gửi bàigửi bởi hoangthu1974 » T.Hai 19/01/2009 9:11 am

Mã: Chọn hết

  1. Function GetDecimal(ByVal i As Double) As Double
  2.     Dim m As Integer
  3.     m = Len(Trim(Str(i))) - InStr(Str(i), ".") + 1
  4.     GetDecimal = Right(Str(i), Len(Str(i)) - InStr(Str(i), "."))
  5.     GetDecimal = GetDecimal / (10 ^ m)
  6. End Function

Đã sửa và test lại.


Quay về “[VB] Mẹo vặt khác”

Đ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