정수부는 그대로 사용하고, 실수부를 얻어 분자로, 실수부의 문자수에 따라 10의 역승을 구해 분모로 하고, 5,3,2로 가면서 약분하여 얻는 방식이다.
소스의 처리한 이미지 입니다.



소스는 다음과 같습니다.
' 소수를 분수로 표시하기(소수 부분만 정수 부분은 그대로)
Option Explicit

Private Sub txtFloat_KeyDown(KeyCode As Integer, Shift As Integer)
    If Not KeyCode = vbKeyReturn Then Exit Sub
    If InStr(1, txtFloat.Text, ".") = 0 Then Exit Sub
   
    Dim stringNumber As String ' 수치를 문자열로
    Dim IntegerNumber As Long ' 정수부
    Dim RealNumber As Long ' 실수부
    Dim MultilerNumber As Long ' 실수부에 수에 대한 승수
   
    stringNumber = txtFloat.Text
    MultilerNumber = InStr(stringNumber, ".")
    IntegerNumber = Val(Left(stringNumber, MultilerNumber - 1))
    RealNumber = Val(Mid(stringNumber, MultilerNumber + 1))
    MultilerNumber = 10 ^ Len(CStr(RealNumber))
   
    While RealNumber Mod 5 = 0 And MultilerNumber Mod 5 = 0 ' 약분한다.
        RealNumber = RealNumber / 5
        MultilerNumber = MultilerNumber / 5
    Wend
    While RealNumber Mod 3 = 0 And MultilerNumber Mod 3 = 0
        RealNumber = RealNumber / 3
        MultilerNumber = MultilerNumber / 3
    Wend
    While RealNumber Mod 2 = 0 And MultilerNumber Mod 2 = 0
        RealNumber = RealNumber / 2
        MultilerNumber = MultilerNumber / 2
    Wend
   
    MsgBox IIf(IntegerNumber > 0, IntegerNumber & " ", "") & RealNumber & "/" & MultilerNumber
End Sub

+ Recent posts