Foxtable(狐表)用户栏目专家坐堂 → 如何用分数形式显示计算结果


  共有10013人关注过本帖树形打印复制链接

主题:如何用分数形式显示计算结果

帅哥哟,离线,有人找我吗?
程兴刚
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7237 积分:40608 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/29 20:38:00 [显示全部帖子]

用得着那么复杂吗?

 

Dim s As String = "355/555"
Dim a As Integer = s.split("/")(0) '分子数
Dim b As Integer = s.split("/")(1)  '分母数
Dim c As Integer =  Math.Min(a,b)
If a > 1 And b > 1
    For i As Integer = c To 2 Step -1
        If b Mod i = 0 And a Mod i = 0
            Output.show(a/i & "/" & b/i )
            Exit For
        End If
        If i = 2
            Output.show(a & "/" & b)
        End If
    Next
End If


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7237 积分:40608 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/29 21:11:00 [显示全部帖子]

哦,我看错了楼主的意思,以为仅仅是约分呢!按照楼主的要求出现1-这样的情况,这样即可,同时实现自动约分:

 

Dim s As String = "1-999/7999"
Dim s1 As String
Dim a As Integer = s.split("/")(1) - s.split("/")(0).split("-")(1)
Dim b As Integer = s.split("/")(1)  '分母数
Dim c As Integer =  Math.Min(a,b)
If a > b
    s = a \ b & "-"
Else
    s = Nothing
End If
If a > 1 And b > 1
    For i As Integer = c To 2 Step -1
        If b Mod i = 0 And a Mod i = 0
            Output.show(s & a/i & "/" & b/i )
            Exit For
        End If
        If i = 2
            Output.show(a & "/" & b)
        End If
    Next
End If

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7237 积分:40608 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/29 23:51:00 [显示全部帖子]

复杂在于分解公式,其他的并不可怕,您可以将不同的复杂公式贴出来,让大家在摸索中寻找规律!


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7237 积分:40608 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/30 8:56:00 [显示全部帖子]

这样试试(其实公式复杂并不可怕,与它没关系):

 

Dim s,s1 As String
s = "-4*25/2/5/10*(-1)*1-1/600+5*5*5/125*(1/5+(-1/5))+1/600-41/7999-(-41/7999)-999/7999" '这里的下一行最好先判断一下该公式是否合法,否则提示公式错误并终止代码的执行!
Dim a,b,c,d As Integer
a = eval(s)
If a = 1 Or a = 0
    Output.show(a)
Else
    s1 = a
    s1 = s1.split("-")(1)
    b = s1
    For i As Integer = 1 To 100000000
        If i Mod b = 0 And (i/b) Mod b = 0
            c = i/b
            b = i
            Exit For
        End If
    Next
    d =  Math.Min(b,c)
    If a < 1
        s = "-"
    Else
        s = Nothing
    End If
    If b > 1 And c > 1
        For i As Integer = d To 2 Step -1
            If b Mod i = 0 And c Mod i = 0
                Output.show(s & b/i & "/" & c/i)
                Exit For
            End If
            If i = 2
                Output.show(s & b & "/" & c)
            End If
        Next
    End If
End If

[此贴子已经被作者于2012-9-30 8:58:22编辑过]

 回到顶部