
如何用VB编程把一小数化为最简分数。
已知这个小数值为N/M,但N、M是不是整数不确定,正负不确定。想把它转换为最简分数。得到Print分子+"/"+分母的效果。请好心人把代码写一下吧。...
已知这个小数值为 N/M ,但N、M是不是整数不确定,正负不确定。想把它转换为最简分数。得到Print 分子 + "/" + 分母 的效果。
请好心人把代码写一下吧。 展开
请好心人把代码写一下吧。 展开
展开全部
这里在窗体上放置三个文本框,text1,text2,text3分别用来输入分子、分母和输出结果,再放置一个命令按钮来控制。
把下面的代码粘贴进去,运行后输入不同的数值试试,可是你想要的结果。
Private Sub Command1_Click()
Dim GYS As Integer '定义公约数
Dim XSW1 As Integer
Dim XSW2 As Integer
XSW1 = XSW(Text1)
XSW2 = XSW(Text2)
If XSW1 > XSW2 Then '根据小数位,将分子分母同时扩大相同的倍数,转为整数
Text1 = Val(Text1) * 10 ^ XSW1
Text2 = Val(Text2) * 10 ^ XSW1
Else
Text1 = Val(Text1) * 10 ^ XSW2
Text2 = Val(Text2) * 10 ^ XSW2
End If
GYS = GCD(Val(Text1.Text), Val(Text2.Text)) '将两个数同时除以最大公约数
Text1 = Val(Text1) / GYS
Text2 = Val(Text2) / GYS
Text3 = Text1 & "/" & Text2
End Sub
Private Function GCD(x As Integer, y As Integer) As Integer '求两个数的最大公约数
Dim r As Integer
Do Until y = 0
r = x Mod y
x = y
y = r
Loop
GCD = x
End Function
Function XSW(dd As String) '求小数位
XSW = 0
For i = 1 To Len(dd)
If Mid(dd, i, 1) = "." Then
XSW = Len(dd) - i
End If
Next
End Function
把下面的代码粘贴进去,运行后输入不同的数值试试,可是你想要的结果。
Private Sub Command1_Click()
Dim GYS As Integer '定义公约数
Dim XSW1 As Integer
Dim XSW2 As Integer
XSW1 = XSW(Text1)
XSW2 = XSW(Text2)
If XSW1 > XSW2 Then '根据小数位,将分子分母同时扩大相同的倍数,转为整数
Text1 = Val(Text1) * 10 ^ XSW1
Text2 = Val(Text2) * 10 ^ XSW1
Else
Text1 = Val(Text1) * 10 ^ XSW2
Text2 = Val(Text2) * 10 ^ XSW2
End If
GYS = GCD(Val(Text1.Text), Val(Text2.Text)) '将两个数同时除以最大公约数
Text1 = Val(Text1) / GYS
Text2 = Val(Text2) / GYS
Text3 = Text1 & "/" & Text2
End Sub
Private Function GCD(x As Integer, y As Integer) As Integer '求两个数的最大公约数
Dim r As Integer
Do Until y = 0
r = x Mod y
x = y
y = r
Loop
GCD = x
End Function
Function XSW(dd As String) '求小数位
XSW = 0
For i = 1 To Len(dd)
If Mid(dd, i, 1) = "." Then
XSW = Len(dd) - i
End If
Next
End Function
展开全部
取小数点之后的全部数字A, 分子A 分母 B= 10^len(cstr(A))
然后用质数循环去约分 ,最后得到的就OK了
我只告诉你方法了先。
然后用质数循环去约分 ,最后得到的就OK了
我只告诉你方法了先。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
悬赏才十分啊,提高的20我再动脑子
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
'小数化整数
Function GetLong(ByVal x As Single) As Long
Do While Int(x) <> x
x = x * 10
Loop
GetLong = x
End Function
'最大公约数
Function GetDivisor(ByVal a As Long, ByVal b As Long) As Long
Dim maxValue As Long
Dim minValue As Long
Dim lng As Long
maxValue = IIf(a >= b, a, b)
minValue = IIf(a < b, a, b)
Do
lng = maxValue Mod minValue
maxValue = minValue
minValue = lng
Loop While lng
GetDivisor = maxValue
End Function
'得到结果
Sub GetValue(s As String)
Dim d As Long
Dim tmp
tmp = Split(s, "/")
tmp(0) = GetLong(tmp(0)) '化为整数
tmp(1) = GetLong(tmp(1))
d = GetDivisor(tmp(0), tmp(1)) '最大公约数
tmp(0) = tmp(0) / d
tmp(1) = tmp(1) / d
s = Join(tmp, "/")
End Sub
Private Sub Command1_Click()
Dim s As String
s = "1.2/2.4"
GetValue s
MsgBox s
s = "12/240"
GetValue s
MsgBox s
s = "35/75"
GetValue s
MsgBox s
End Sub
Function GetLong(ByVal x As Single) As Long
Do While Int(x) <> x
x = x * 10
Loop
GetLong = x
End Function
'最大公约数
Function GetDivisor(ByVal a As Long, ByVal b As Long) As Long
Dim maxValue As Long
Dim minValue As Long
Dim lng As Long
maxValue = IIf(a >= b, a, b)
minValue = IIf(a < b, a, b)
Do
lng = maxValue Mod minValue
maxValue = minValue
minValue = lng
Loop While lng
GetDivisor = maxValue
End Function
'得到结果
Sub GetValue(s As String)
Dim d As Long
Dim tmp
tmp = Split(s, "/")
tmp(0) = GetLong(tmp(0)) '化为整数
tmp(1) = GetLong(tmp(1))
d = GetDivisor(tmp(0), tmp(1)) '最大公约数
tmp(0) = tmp(0) / d
tmp(1) = tmp(1) / d
s = Join(tmp, "/")
End Sub
Private Sub Command1_Click()
Dim s As String
s = "1.2/2.4"
GetValue s
MsgBox s
s = "12/240"
GetValue s
MsgBox s
s = "35/75"
GetValue s
MsgBox s
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
思路:只要知道公约数就行了,分子分母同时除以两数的最大公约数即可得到化简后的分子分母。
以下代码通过辗转相除法求得两数的最大公约数。
Let X2 = Val(InputBox("请输入第一个数据。"))
Let Y2 = Val(InputBox("请输入第二个数据。"))
x1 = X2
y1 = Y2
Do While y1 <> 0
remainder = x1 Mod y1
x1 = y1
y1 = remainder
Loop
gcd = x1
fff = X2 * Y2 / gcd
MsgBox (X2 & " 和 " & Y2 & " 的最大公约数为 " & gcd)
以下代码通过辗转相除法求得两数的最大公约数。
Let X2 = Val(InputBox("请输入第一个数据。"))
Let Y2 = Val(InputBox("请输入第二个数据。"))
x1 = X2
y1 = Y2
Do While y1 <> 0
remainder = x1 Mod y1
x1 = y1
y1 = remainder
Loop
gcd = x1
fff = X2 * Y2 / gcd
MsgBox (X2 & " 和 " & Y2 & " 的最大公约数为 " & gcd)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询