Hàm quy đổi điểm dùng mệnh đề Select case

Liên hệ QC

quoctuan23rd

Thành viên mới
Tham gia
4/1/18
Bài viết
6
Được thích
0
Giới tính
Nam
Mọi người cho em hỏi, em đang viết một hàm dùng để quy đổi thang điểm 10 sang thang điểm 4 thì gặp 1 vấn đề. Khi em khai báo biến "diem10 as single" thì không thể quy đổi điểm trong trường hợp sinh viên có điểm "Miễn", hoặc "TL"
Mã:
Function DIEM4(diem10 As Single)
    Select Case diem10
        Case 1, Is >= 8.5
            DIEM4 = 4
        Case 7.7 To 8.4
            DIEM4 = 3.5
        Case 7 To 7.6
            DIEM4 = 3
        Case 6.2 To 6.9
            DIEM4 = 2.5
        Case 5.5 To 6.1
            DIEM4 = 2
        Case 4.7 To 5.4
            DIEM4 = 1.5
        Case 4 To 4.6
            DIEM4 = 1
        Case 2 To 3.9
            DIEM4 = 0
    End Select
End Function
 
Bạn có thể hiểu là vì Single là kiểu biến đại diện kiểu Số thập phân, "Miễn" hoặc "TL" là String kiểu biến đại diện cho chuỗi.
Bạn không để nào bỏ một chuỗi vào biến đang đại diện cho số được. Biến là kiểu chuỗi thì mới nhận được số

Trong trường hợp này bạn nên để là diem10 thôi, và thêm Case Else để xử lý thêm
 
Upvote 0
Bạn có thể hiểu là vì Single là kiểu biến đại diện kiểu Số thập phân, "Miễn" hoặc "TL" là String kiểu biến đại diện cho chuỗi.
Bạn không để nào bỏ một chuỗi vào biến đang đại diện cho số được. Biến là kiểu chuỗi thì mới nhận được số

Trong trường hợp này bạn nên để là diem10 thôi, và thêm Case Else để xử lý thêm
Cảm ơn phản hồi của anh! Thế trong trường hợp bài toán này có thể xử lý bằng cách nào được nhỉ? vì bản chất như anh nói diem10 có kiểu dữ liệu số thập phân, không thể gán giá trị chuỗi cho biến đó được, vậy nên e cũng chưa tìm ra giải pháp sử dụng Case Else.
 
Upvote 0
PHP:
  If TypeName(diem10) = "String" then
      If "Mi" & ChrW(7877) & "n" = diem10 Then
          Diem4 = 4
      ElseIf "TL" = diem10 Then
          Diem4 = 4
      End if
  ElseIf IsNumeric(diem10) then
    diem10 = Round(diem10 , 1)
    Select Case True '/ diem10'
      Case DIEM10 >= 8.5 Or Diem10 = 1: DIEM4 = 1 ' /Is >= 8.5'
      Case DIEM10 >= 7.7: DIEM4 = 1 ' /Is >= 7.7'
      '...'
    End Select
  End if
 
Lần chỉnh sửa cuối:
Upvote 0
String chỉ là nửa vấn đề của bạn. Bạn còn một nửa vấn đề, khó nhìn thấy hơn, đó là:
Số thập phân không ở trong dạng chính xác. Vì vậy, mấy cái Case của bạn phải chỉnh về các khoảng có thể bao hết các trị. Cách dễ hơn hết là nhân số cho 10 và so sánh theo kiểu số nguyên.

Function Diem4(diem10 As Variant) As Single
Const DIEM_TL = 999
Const DIEM_MIEN = 888
Dim DiemSS As Integer
If IsNumeric(diem10) Then
DiemSS = Int(diem10 * 10)
Else If diem10 = "TL" Then
DiemSS = DIEM_TL
Else
DiemSS = DIEM_MIEN
End If
Select Case DiemSS
Case DIEM_TL
Diem4 = ???
CaseDDIEM_MIEN
Diem4 = ???
Case 85 To 100
Diem4 = 4
Case 77 to 85
Diem4 = 3.5
Case 70 To 77
...
End Select
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom