• 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
User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

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

Postby hoangthu1974 » Sat 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ũ

Code: Select all

  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

Code: Select all

  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.



User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

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

Postby truongphu » Sat 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:

Code: Select all

  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
Last edited by truongphu on Sat 17/01/2009 8:21 pm, edited 2 times in total.
o0o--truongphu--o0o

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

User avatar
CoffeeShop
Thành viên trung thành
Thành viên trung thành
Posts: 209
Joined: Sun 11/01/2009 11:25 pm
Has thanked: 2 times
Been thanked: 2 times

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

Postby CoffeeShop » Sat 17/01/2009 8:16 pm

Code: Select all

  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

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Sat 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.

Code: Select all

  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

User avatar
T7
Thành viên danh dự
Thành viên danh dự
Posts: 415
Joined: Thu 24/05/2007 8:19 pm
Location: Long Xuyên - An Giang
Been thanked: 12 times
Contact:

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

Postby T7 » Sun 18/01/2009 10:01 am

hoangthu1974 wrote:

Code: Select all

  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

Code: Select all

  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++;

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

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

Postby hoangthu1974 » Mon 19/01/2009 9:11 am

Code: Select all

  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.


Return to “[VB] Mẹo vặt khác”

Who is online

Users browsing this forum: No registered users and 0 guests