Sao phép cộng cho kết quả sai?

  • Thread starter Thread starter pmhoang
  • Ngày gửi Ngày gửi
Liên hệ QC

pmhoang

Thành viên thường trực
Tham gia
4/7/08
Bài viết
269
Được thích
83
HTML:
Sub ketqua()
a = InputBox("Nhap a")
b = InputBox("Nhap b")
MsgBox (a & " + " & b & " = " & cong(a, b))
MsgBox (a & " x " & b & " = " & nhan(a, b))
End Sub
Function cong(ByVal a, ByVal b)
cong = (a + b)
End Function
Function nhan(ByVal a, ByVal b)
nhan = (a * b)
End Function
Tại sao khi nhập a=3, b=6 thì có kết quả:
a+b=3+6=36 (Sai)
a*b=3*6=18 (Dúng)
Xin anh em giúp Tôi với, không biết tại sao kết quả phép cộng lại sai???
 
HTML:
Sub ketqua()
a = InputBox("Nhap a")
b = InputBox("Nhap b")
MsgBox (a & " + " & b & " = " & cong(a, b))
MsgBox (a & " x " & b & " = " & nhan(a, b))
End Sub
Function cong(ByVal a, ByVal b)
cong = (a + b)
End Function
Function nhan(ByVal a, ByVal b)
nhan = (a * b)
End Function
Tại sao khi nhập a=3, b=6 thì có kết quả:
a+b=3+6=36 (Sai)
a*b=3*6=18 (Dúng)
Xin anh em giúp Tôi với, không biết tại sao kết quả phép cộng lại sai???
a = InputBox("Nhap a") là text
b = InputBox("Nhap b") là text
a+b=""a"+"b"
Có thể sửa lại
a = Val(InputBox("Nhap a"))
b = Val(InputBox("Nhap b"))
 
Upvote 0
Mã:
a = InputBox("Nhap a")
b = InputBox("Nhap b")
InputBox trả về a, b là chuỗi
Công thức a + b có 2 trường hợp:
- Nếu a, b là số thì toán tử + là phép toán cộng 10+2=12
- Nếu a, b là chuỗi thì toán tử + là phép ghép chuỗi (như &) "10"+"2"="102"
Bạn phải dùng hàm Val để chuyển chuỗi a, b thành số trước khi thực hiện phép cộng
Mã:
 Function cong(ByVal a, ByVal b)
 a = Val(a)
 b = Val(b)
 cong =a + b
 End Function
hoặc chuyển a, b về số ngay từ InputBox như của ThuNghi
 
Upvote 0
a = InputBox("Nhap a") là text
b = InputBox("Nhap b") là text
a+b=""a"+"b"
Có thể sửa lại
a = Val(InputBox("Nhap a"))
b = Val(InputBox("Nhap b"))
Thanks nhieu.
Từ ý kiến của bạn Mình đã nghĩ ra cách này, cho kết quả tốt:
HTML:
Sub ketqua2()
Dim a As Single
Dim b As Single
a = InputBox("Nhap a")
b = InputBox("Nhap b")
MsgBox (a & " + " & b & " = " & cong(a, b))
MsgBox (a & " x " & b & " = " & nhan(a, b))
End Sub

Công thức a + b có 2 trường hợp:
1- Nếu a, b là số thì toán tử + là phép toán cộng 10+2=12
2- Nếu a, b là chuỗi thì toán tử + là phép ghép chuỗi (như &) "10"+"2"="102"
Minh lam rồi. nếu vẫn giữ nguyên code nhu thế thì luon cho ket qua la truong hop 2. còn truong hop 1. Nhập hoài không thấy xãy ra???
 
Upvote 0
Công thức a + b có 2 trường hợp:
Câu trên phải hiểu đúng: "Công thức có 2 trường hợp" chứ không phải "nhập vào input box có 2 trường hợp". Nhập vào Inputbox chỉ có 1 trường hợp số 2 thôi.
 
Upvote 0
Có thể chỉ cần sửa 1 hàm Cong mà thôi, như sau

PHP:
Function cong(ByVal a As Long, ByVal b As Double)
cong = (a + b)
End Function
Như mình là những kẻ chập chững, thì mọi việc khai báo phải tường minh. Đó là thói quen không xấu xa gì!!

Chu1c vui!!
 
Upvote 0
Chỉ cần nói thế này bạn hiểu:
"3" + "6" = "36" (Đúng)
3 + 6 = 36 (Sai)

Phép cộng (+) có thể hiểu là ghép chuỗi, khi đó a, b ko phải là số để 3 + 6 mà vẫn là "3" + "6" ("3" ghép với "6")
Phép cộng (*) chỉ có trong số học, --> a, b tự đổi thành dạng số trước rồi mới nhân ==> "3" * "6" = 3 * 6 = 18 (Đúng)
Hãy cẩn thận với kiểu khai báo (ByVal a, ByVal b) thế này!

Vì thế bạn cần hiểu về bản chất vấn đề (về việc chương trình dịch nó thực hiện như thế nào, lại giống vụ Integer và Long rồi).

P/S: Mình đã sửa tên tiêu đề topic. Không có topic nào là ko đặt được tên rõ ràng cả. Các bạn hãy chú ý. "Đoạn code này" là đoạn nào? (Chả nhẽ ko nắm được tư tưởng, mục đích hoặc vấn đề cần hỏi liên quan tới đoạn code đó)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom