以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  分数显示方式  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84718)

--  作者:lqf168
--  发布时间:2016/5/9 9:59:00
--  分数显示方式
老师好:

请教个问题:

产品表中有一列“规格型号”,想在此列中显示带分数(如:1 1/4),显示方式是要:分子在上面,分母在下面那种。如何做?


--  作者:lqf168
--  发布时间:2016/5/9 10:08:00
--  

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=847&skin=0

 

8楼的方法,能不能用分子在上面,分母在下面显示?


--  作者:大红袍
--  发布时间:2016/5/9 10:16:00
--  

Dim d As Double = -11.75           \'要转化的小数
Dim d1str As String                    \'最后结果的整数部分
Dim d2str As String                    \'最后结果的分数部分

Dim d1 As Integer = Math.Truncate(d)        \'d的整数部分,包括符号
If d1 <> 0 Then d1Str = d1                       \'如果整数部分不为0,则保存下来

If d.ToString.IndexOf(".") > -1 Then           \'如果有小数部分不为0
    Dim d2 = d.ToString.Split(".")(1)            \'取得小数部分
    Dim n As Integer = d2.ToString.Length  \'小数位数
    Dim num As Integer = d2                      \'分子,未约分
    Dim den As Integer = 10^n                   \'分母,未约分
    Dim x As Integer = num
    Dim y As Integer = den
    Dim temp As Integer
    Do While x <> 0                   \'Do Loop 求最大公约数
        temp = y Mod x
        y = x
        x = temp
    Loop                              \'循环结束,最大公约数保存在变量y中
    d2str = d1str * (den/y) + iif(d1str>0, num/y, -num/y) & "/" & den/y       \'约分
End If
Return d2str


--  作者:lqf168
--  发布时间:2016/5/9 10:25:00
--  
以下是引用大红袍在2016/5/9 10:16:00的发言:

Dim d As Double = -11.75           \'要转化的小数
Dim d1str As String                    \'最后结果的整数部分
Dim d2str As String                    \'最后结果的分数部分

Dim d1 As Integer = Math.Truncate(d)        \'d的整数部分,包括符号
If d1 <> 0 Then d1Str = d1                       \'如果整数部分不为0,则保存下来

If d.ToString.IndexOf(".") > -1 Then           \'如果有小数部分不为0
    Dim d2 = d.ToString.Split(".")(1)            \'取得小数部分
    Dim n As Integer = d2.ToString.Length  \'小数位数
    Dim num As Integer = d2                      \'分子,未约分
    Dim den As Integer = 10^n                   \'分母,未约分
    Dim x As Integer = num
    Dim y As Integer = den
    Dim temp As Integer
    Do While x <> 0                   \'Do Loop 求最大公约数
        temp = y Mod x
        y = x
        x = temp
    Loop                              \'循环结束,最大公约数保存在变量y中
    d2str = d1str * (den/y) + iif(d1str>0, num/y, -num/y) & "/" & den/y       \'约分
End If
Return d2str

上面代码,显示 -47/4

 

d2str = num/y & "/" & den/y       \'约分

 

能不能把结果显示成竖状的,就是分子在上面,分母在下面那种。


--  作者:大红袍
--  发布时间:2016/5/9 10:50:00
--  
 不可以的,计算机无法这样显示。
--  作者:lqf168
--  发布时间:2016/5/9 10:53:00
--  
 

如果用“ListView”,把一些常用的分数做成图片,是否可行?


--  作者:lqf168
--  发布时间:2016/5/9 10:58:00
--  
word用 eq \\f(1,4) 可以实现,ft不知道有没有变通的方法?
--  作者:大红袍
--  发布时间:2016/5/9 11:11:00
--  
以下是引用lqf168在2016/5/9 10:53:00的发言:
 

如果用“ListView”,把一些常用的分数做成图片,是否可行?

 

你可以用画图的方式画分数,如

 

Dim zs As String = "11"
Dim fz As String = "3"
Dim fm As String = "4"

Dim fnt As New Font("宋体",20)
Dim gc = basemainform.CreateGraphics
Dim size = gc.MeasureString(zs & fm, fnt)

Dim bmp As new Bitmap(cint(size.width)+10, cint(size.height) * 2+10)
Dim g = Graphics.FromImage(bmp)

g.DrawString(zs,fnt,Brushes.black,0, 0.5*size.height)
Dim zssize = gc.MeasureString(zs, fnt)
g.DrawString(fz,fnt,Brushes.black,zssize.width, 0)
g.DrawString(fm,fnt,Brushes.black,zssize.width, size.height+5)
Dim fmsize = gc.MeasureString(fm, fnt)
g.DrawLine(Pens.Black,zssize.width,size.height+2,zssize.width+fmsize.width+3,size.height+2)

bmp.save("d:\\test2.jpg")


--  作者:lqf168
--  发布时间:2016/5/9 11:14:00
--  
谢谢,我试试看