如何用VB编程把一小数化为最简分数。

已知这个小数值为N/M,但N、M是不是整数不确定,正负不确定。想把它转换为最简分数。得到Print分子+"/"+分母的效果。请好心人把代码写一下吧。... 已知这个小数值为 N/M ,但N、M是不是整数不确定,正负不确定。想把它转换为最简分数。得到Print 分子 + "/" + 分母 的效果。
请好心人把代码写一下吧。
展开
 我来答
fyyunfei
2009-07-24 · TA获得超过144个赞
知道答主
回答量:147
采纳率:100%
帮助的人:78.8万
展开全部
这里在窗体上放置三个文本框,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
chenxfsoft
2009-07-24 · TA获得超过1381个赞
知道大有可为答主
回答量:2418
采纳率:0%
帮助的人:1889万
展开全部
取小数点之后的全部数字A, 分子A 分母 B= 10^len(cstr(A))
然后用质数循环去约分 ,最后得到的就OK了

我只告诉你方法了先。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Kaoet
2009-07-24 · TA获得超过107个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:0
展开全部
悬赏才十分啊,提高的20我再动脑子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友01b802e
2009-07-25 · TA获得超过339个赞
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:317万
展开全部
'小数化整数
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Li_Zaodie
2009-07-25 · TA获得超过648个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:402万
展开全部
思路:只要知道公约数就行了,分子分母同时除以两数的最大公约数即可得到化简后的分子分母。

以下代码通过辗转相除法求得两数的最大公约数。

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)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式