早教吧 育儿知识 作业答案 考试题库 百科 知识分享

VBA把无限循环小数化为分数首先要判断这个数是不是无限循环小数.

题目详情
VBA把无限循环小数化为分数
首先要判断这个数是不是无限循环小数.
▼优质解答
答案和解析
以下代码在excel中运行,可以对纯循环小数化分数,例如0.236236236这种纯循环小数

Sub test()
Dim Num As Double
Dim i%, Lnj%, Sec#, ZeroN%, NSec$, Cy$, ChPass As Boolean
Num = 0.123123123123
Num = Abs(Num)
Sec = Num - Int(Num)
Do
i = i + 1
Loop Until Sec * 10 ^ i > 1
ZeroN = i - 1
NSec = Sec * 10 ^ ZeroN
NSec = Right(NSec, Len(NSec) - 1)
ChPass = True
Do
Lnj = Lnj + 1
Cy = Left(NSec, Lnj)
For i = 1 To 2
If Not Cy = Mid(NSec, Lnj * i + 1, Lnj) Then
ChPass = False
Exit For
End If
Next i
If ChPass Then
Exit Do
End If
Loop Until 3 * Lnj > Len(NSec)
Dim Cona#, b#, a$
b = Cy
For i = 1 To Len(Cy)
a = a & "9"
Next i
Cona = a * 10 ^ ZeroN
Dim SaveI&
'====约分化简====
For i = 2 To b
If b Mod i = 0 And Cona Mod i = 0 Then
SaveI = i
End If
Next i
If SaveI > 1 Then
b = b / SaveI
Cona = Cona / SaveI
End If
'
MsgBox b & "/" & Cona
End Sub