Hàm Round trong VB Có lỗi. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hohuuthang

Thành viên mới
Tham gia
27/5/10
Bài viết
2
Được thích
0
Tôi dùng hàm Round của vba để làm tròn số, thì thấy có một trường hợp kết quả không đúng như sau:
Ví dụ: tôi làm tròn số 3.25 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.2
Tôi làm tròn số 3.35 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.3 và thử các trường hợp khác đều cho kết quả làm tròn lên, chỉ duy nhất trường hợp *.25 khi làm tròn đến hàng thập phân thứ 1 thì hàm round lại làm tròn xuống.

Xin nhờ các anh chị xem xét xem có phải hàm round bi sai hay không?
em gửi file kèm theo để anh chị kiểm tra. trong file em có viết một fuction đôn giản để thử hàm round:
function lamtron(so as double) as double
lamtron = round(so,1)
end function
 

File đính kèm

Vậy dùng hàm của worksheetfunction đi vì hàm round trong VBA có những trường hợp nào đó ta không lường trước

lamtron = WorksheetFunction.Round(so, 1)
 
Upvote 0
Tôi dùng hàm Round của vba để làm tròn số, thì thấy có một trường hợp kết quả không đúng như sau:
Ví dụ: tôi làm tròn số 3.25 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.2
Tôi làm tròn số 3.35 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.3 và thử các trường hợp khác đều cho kết quả làm tròn lên, chỉ duy nhất trường hợp *.25 khi làm tròn đến hàng thập phân thứ 1 thì hàm round lại làm tròn xuống.

Xin nhờ các anh chị xem xét xem có phải hàm round bi sai hay không?
em gửi file kèm theo để anh chị kiểm tra. trong file em có viết một fuction đôn giản để thử hàm round:
function lamtron(so as double) as double
lamtron = round(so,1)
end function
Cái này có bàn nhiều trên GPE rồi, đây là 1 ví dụ để bạn tham khảo:
http://www.giaiphapexcel.com/forum/...heetFunction-và-của-Excel&p=503173#post503173
 
Upvote 0
Tôi dùng hàm Round của vba để làm tròn số, thì thấy có một trường hợp kết quả không đúng như sau:
Ví dụ: tôi làm tròn số 3.25 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.2
Tôi làm tròn số 3.35 đến hàng thập phân thứ 1 thì nhận được kết quả là 3.3 và thử các trường hợp khác đều cho kết quả làm tròn lên, chỉ duy nhất trường hợp *.25 khi làm tròn đến hàng thập phân thứ 1 thì hàm round lại làm tròn xuống.

Xin nhờ các anh chị xem xét xem có phải hàm round bi sai hay không?
em gửi file kèm theo để anh chị kiểm tra. trong file em có viết một fuction đôn giản để thử hàm round:
function lamtron(so as double) as double
lamtron = round(so,1)
end function

tham khảo được trên mạng :

[INFO1]try adding 0.000001 to your number before applying the Round function. By adding the 0.000001, the expression that you are rounding will end in 1, instead of 5...causing the Round function to round in the traditional wayRound(50.045 + 0.000001, 2)
or you can use Application.WorksheetFunction.Round(50.045, 2). Same as Excel Function.[/INFO1]

To emulate the Excel function in VBA use
Mã:
Function RoundXL(val As Double, places As Long) As Double
Dim mult As Long
mult = 10 ^ places
RoundXL = Int(val * mult + 0.5) / mult
End Function

 
Upvote 0
Cách hoạt động của hàm Round trong VBA tôi đã giải thích một lần ròi, trong cái link của 3T đưa ra bên trên.

Ở đây tôi bàn thêm chút nữa cho chủ thớt hiểu rõ:

VBA là công cụ chính yếu của Access, và đồng thời được áp dụng cho Excel, sau đó nới rộng chung cho cả Office.

Vì cả Excel và Access đều là côn cụ có nguồn gốc từ tài chính ngân hàng cho nên hầu hết những con toán của chúng phải được hiểu theo luật tài chính ngân hàng.

Theo toán học và khoa học, chúng ta có quy định làm tròn là "5 trở lên thì tăng, dưới 5 cắt bỏ"

Luật này tuy rất đơn giản nhưng bị vấn đề trâm trọng là theo xác suất:
các số lẻ 0123456789 = gồm 10 số
số 0 không cần làm tròn, như vậy còn lại 9
56789 là 5 số; 1234 là 4 số
Nếu dùng luật toán thì phương pháp làm tròn thiên vị tăng với tỷ lệ 5/4

Tuy con số thiên vị rất nhỏ nhưng đối với con toán tài chính hàng trăm triệu mỗi ngày, sự thiên vị này không thể chấp nhận được.

Vì vậy trong tài chính, người ta phân ra
0 không cần làm tròn
1234 cắt bỏ, 6789 tăng lên
Còn lại 5 thì chia ra 2 trường hợp để hoặc cắt bỏ, hoặc tăng lên. Luật áp dụng này gọi là làm tròn đến số chẵn (round to even value)
Theo luật này ta sẽ tăng hay cắt bỏ như thế nào để số hàng cuối cùng là số chẵn (02468)

VD làm tròn 1 số lẻ:
1,23 -> 1,2 : 3 nhỏ hơn 5
1,26 -> 1,3 : 6 lớn hơn 5
1,25 -> 1,2 : 5 được bỏ luôn vỉ 2 là số chẵn; nếu 1,35 thì tăng thành 1,4 vì 3 là số lẻ, 4 mới là số chẵn

Theo phương pháp này thì xác suất tăng và cắt bỏ của làm tròn là 50/50
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom