VB实现小数和分数的相互转化

原创 2006年06月03日 21:21:00

Function fenshu(ByVal xiaoshu As Single, Optional ByVal jingdu As Integer = 3) As String '小数转换为分数,误差小于0.1^jingdu
Dim i As Long
Do
i = i + 1
Loop Until Abs((i / xiaoshu) - Round((i / xiaoshu), 0)) < 0.1 ^ jingdu
fenshu = i & "/" & Round(i / xiaoshu)
End Function


Function xiaoshu(ByVal fenshu As String) As String '将N/D形式(其中N为分子,D为分母)的分数转换为小数,如果为无限循环小数则用括号将循环节括起来
Dim N As Long, D As Long
N = CLng(Split(fenshu, "/")(0))
D = CLng(Split(fenshu, "/")(1))
If N Mod D = 0 Then '整除
xiaoshu = N / D
Exit Function
Else


Dim digit() As String, flag() As Long, temp As Double, temp2 As Long, i As Long, K As Integer
ReDim digit(1 To D + Len(CStr(D))) '定义最长不重复位数
ReDim flag(D) '0-D 每位数字出现于小数点后的位置
xiaoshu = Int(N / D) & "."

temp = N Mod D '取余

i = 2
Do While i <= D + Len(CStr(D)) '循环所有可能

If temp = 0 Then '除尽了
ReDim Preserve digit(1 To i) '前i位
xiaoshu = xiaoshu & Join(digit, "")
Exit Function
End If


If flag(temp) > 1 Then '重复出现
digit(flag(temp)) = "(" & digit(flag(temp)) 'flag(temp)指该数字第一次出现的位置,添加左括号
ReDim Preserve digit(1 To i - 1)
xiaoshu = xiaoshu & Join(digit, "") & ")" '添加右括号
Exit Function
Else
flag(temp) = i '赋值
End If
'以下三行模拟除法运算,实现高精度除法
temp = temp * 10
digit(i) = Int(temp / D) Mod 10
temp = temp - Int(temp / D) * D

i = i + 1

Loop

End If
End Function

Private Sub Command1_Click()
Dim i As Integer, x() As String

ReDim x(1 To 6) '小数到分数
For i = 1 To 6
x(i) = fenshu(3.14159265358979, i) & "(误差小于1/" & 10 ^ (i - 1) & " )"
Next
MsgBox Join(x, vbCrLf), vbInformation, "圆周率"

ReDim x(1 To 17) '分数到小数
For i = 1 To 17
x(i) = Right(" " & i, 2) & "/17=" & xiaoshu(i & "/17")
Next
MsgBox Join(x, vbCrLf), vbInformation, "17的循环节"
End Sub

分数计算器(vb)...

  • 2011年06月05日 17:15
  • 20KB
  • 下载

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值)

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值) 1,要求      用户以分数形式输入,以分数形式输出,用java语言实现分数中的各种运算(加减乘除,求余,求幂,求两个...

用分数的形式输出两个数相除的商——java实现

遇到这样一个问题:以分数的形式输出两个数的商,比如7除以10 ,不是输出 0.7 而是输出 7/10 , 6除以9 输出 2/3 。 因为java没有对应的转化函数,所以自己写了一个。我的做法比较简...

c++大数、分数、模数运算实现模板

大数#include #include #include using namespace std;class BigNum { public: static const int MOD ...

分数转化小数C语言

  • 2013年03月17日 22:26
  • 438B
  • 下载

用C语言实现分数统计的单链表

  • 2010年04月30日 09:41
  • 745B
  • 下载

高德经纬度、百度经纬度、标准经纬度相互转换(VB.NET)

经过多天的整理,终于把这几个相互转换整理完成。 【说明】 谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标。 百度地图API是 BD-09坐标。 我们国家标准经纬度是WG1...

c++实现学生分数管理系统

  • 2011年09月05日 18:37
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB实现小数和分数的相互转化
举报原因:
原因补充:

(最多只允许输入30个字)