以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- FoxTable中如何将小数转化为分式? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=847)
|
-- 作者:狐孩儿
-- 发布时间:2008/10/13 11:24:00
-- FoxTable中如何将小数转化为分式?
如: 0.66667→2/3, 2.5→2 1/2
另:代码窗口中函数Floor的链接有误!
[此贴子已经被作者于2008-10-13 16:09:25编辑过]
|
-- 作者:贺老六
-- 发布时间:2008/10/13 11:43:00
--
没有这个东东,我看看能不能提供一个
|
-- 作者:狐孩儿
-- 发布时间:2008/10/13 11:51:00
--
以下是引用贺老六在2008-10-13 11:43:00的发言: 没有这个东东,我看看能不能提供一个
发现现在FoxTable中的数学函数反不如易表丰富,如易表中的Degrees,GCD,LCM,Quotient等还是有大作用嘀!
|
-- 作者:smileboy
-- 发布时间:2008/10/13 12:14:00
--
个人觉得分数用处很少
|
-- 作者:贺老六
-- 发布时间:2008/10/13 12:27:00
--
用代码最大的好处,是可以自己写,例如小数转分数的代码是:
Dim V As Double \'要转换的小数 Dim N As Long \'分子 Dim D As Long \'分母 Dim MaxTerms As Long = 15 \'最大循环次数 Dim MinDivisor As Double = 0.000001 \'最小除数 Dim MaxError As Double = 0.00000001 \'精度 Dim F As Double Dim A As Long Dim n1 As Long Dim D1 As Long Dim n2 As Long Dim D2 As Long
F = V n1 = 1 D1 = 0 n2 = 0 D2 = 1
For i As Long = 0 To MaxTerms A = CLng(Math.Floor(F)) F = F - A N = n1 * A + n2 D = D1 * A + D2 n2 = n1 D2 = D1 n1 = N D1 = D
If F < MinDivisor Then Exit For If Math.Abs(V - N / D) < MaxError Then Exit For F = 1 / F Next i Return N & "/" & D
[此贴子已经被作者于2008-10-13 12:40:43编辑过]
|
-- 作者:狐孩儿
-- 发布时间:2008/10/13 12:51:00
--
以下是引用贺老六在2008-10-13 12:27:00的发言:
用代码最大的好处,是可以自己写,例如小数转分数的代码是:
Dim V As Double \'要转换的小数 Dim N As Long \'分子 Dim D As Long \'分母 Dim MaxTerms As Long = 15 \'最大循环次数 Dim MinDivisor As Double = 0.000001 \'最小除数 Dim MaxError As Double = 0.00000001 \'精度 Dim F As Double Dim A As Long Dim n1 As Long Dim D1 As Long Dim n2 As Long Dim D2 As Long
F = V n1 = 1 D1 = 0 n2 = 0 D2 = 1
For i As Long = 0 To MaxTerms A = CLng(Math.Floor(F)) F = F - A N = n1 * A + n2 D = D1 * A + D2 n2 = n1 D2 = D1 n1 = N D1 = D
If F < MinDivisor Then Exit For If Math.Abs(V - N / D) < MaxError Then Exit For F = 1 / F Next i Return N & "/" & D
[此贴子已经被作者于2008-10-13 12:40:43编辑过]
哈哈,这里除了您,没几人能写出上面的代码吧!
|
-- 作者:kylin
-- 发布时间:2008/10/13 13:18:00
--
那就将其当作通用代码使用得了,呵呵。 收藏
|
-- 作者:lxl
-- 发布时间:2008/10/13 15:45:00
--
这个是表示成带分数的代码 思路是0.75 先写成 75/100 求最大公约数25 然后约分
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 As Integer = 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 = num/y & "/" & den/y \'约分 End If Return d1str & " " & d2str
[此贴子已经被作者于2008-10-13 15:49:51编辑过]
|
-- 作者:狐孩儿
-- 发布时间:2008/10/13 15:52:00
--
以下是引用lxl在2008-10-13 15:45:00的发言:
这个是表示成带分数的代码 思路是0.75 先写成 75/100 求最大公约数25 然后约分
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 = num/y & "/" & den/y \'约分 End If Return d1str & " " & d2str
這個在適用的範圍,還挺精準轉化
|
-- 作者:kylin
-- 发布时间:2008/10/13 16:38:00
--
老六的代码,生成的结果统统是“分子/分母”形式,如11.5生成23/2;lxl斑竹是“整数 分子/分母”,如11.5生成11 1/2 都收藏,呵呵!
|