早教吧作业答案频道 -->其他-->
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
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
看了VBA把无限循环小数化为分数首...的网友还看了以下:
下列选项,哪一个是正确的A.有理数与无理数的和定是无理数B.无理数与无理数的和定是无理数C.无理数与 2020-03-31 …
下列说法中正确的是()A.无理数是无限不循环小数B.无限小数都是无理数C.-1的平方根是±1D.- 2020-04-11 …
下列说法中,正确的是()A.无理数包括正无理数、0和负无理数B.无理数是用根号形式表示的数C.无理 2020-05-02 …
下列说法正确的是A无理数的和一定是无理数B无理数的积一定是无理数C有理数乘无理数一定是无理数D有理 2020-06-03 …
高数,无穷小与无穷大下列说法正确的是?A无穷小量是很小很小的数B无穷大量是很大很大的数C某一极限过 2020-06-14 …
下列说法中正确的是()A.带根号的数是无理数B.无理数不能在数轴上表示出来C.无理数是无限小数D. 2020-06-27 …
下列说法正确的是A.无限小数是无理数B.无限不循环小数是无理数C.无理数的相反数是有理数D.两个无 2020-06-27 …
下列说法中,正确的是()A.无理数包括正无理数、零和负无理数B.无限小数都是无理数C.正实数包括正 2020-06-27 …
求哥哥姐姐,叔叔婶婶们帮做几道8年级的数学题,1.下列说法正确的是A.有理数只是有限小数B.无理数 2020-07-16 …
函数y=x+sinx是()A有界奇函数B无界偶函数C非奇非偶函数D无界奇函数怎样判断函数有界无界? 2020-07-31 …