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

摘要:
Functionfenshu(ByValxiaoshuaAsSingle,OptionalByValjingduAsInteger=3)AsString的小数被转换为误差小于0.1的分数^jingduDimiAsLongDo=i+1LoopUntilAbs((i/xiaoshu)-Round((i/xiaoshu),0))˂0.1 ^jingdu fenshu=i&“/”&Round(i/xiaohu

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实现小数和分数的相互转化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux6410触摸屏驱动Communications link failure报错的处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Linux查看机器和硬盘的SN

查看硬件RAID中硬盘的SN#sas端口:[root@~]$smartctl-a/dev/sda dmegaraid,n***序列号:6RJ974SR***#sat端口[root@~]$smarttl-a/dev/sda-dsat+megaraid,n***序列号:6BRJ974SR***查看机器SN[root@~~]$dmidcode-t1**序列号...

用python调用caffe时出错:AttributeError: 'module' object has no attribute 'bool_'

下面给出了一个解决方案,即重命名冲突的io文件:numpyと PyCaffe公司が io。年が 竞争す る よ で す$ pythonclassify。py--raw_scale255~/caffe/101_ObjectCategories/airaires/image_0001.jpg../result.npyTraceback:文件“classif.py...

ESXi挂载NFS共享存储

使用万兆交换机,ESXi使用NFS协议连接存储。本文介绍的是通过NFS协议挂载共享存储上的VS01卷,共享存储上已经赋予ESXi主机访问该卷的权限。...

【解决方法】ModuleNotFoundError: No module named 'flask._compat'

起源最近发下很多人在我的python课程下面提问,关于安装完扩展运行程序的时候出现如下的莫名其妙的错误Traceback(mostrecentcalllast):File"manage_web.py",line2,infromapplicationimportapp,managerFile"/data/www/private_deploy/python3_y...

Nginx反向代理缓冲区优化

为了为不同域名的业务需求设置代理_ bufferingproxy_缓冲参数用于控制是否打开后端响应内容的缓冲区_缓冲区将缓冲到硬盘(缓冲区目录由_temp_path命令指定),...

go语言游戏服务端开发(一)——架构

本教程以Go语言为例。特别是游戏服务进程有更新上线时,稳定性还没有被线上并发验证,宕机的几率会增加,数据丢失的风险也会增加。为了减轻风险,可以考虑把数据缓存跟服务进程分离。对于轻中度游戏,游戏的通信量不会很多,没必要每个分服都有一个长连接socket网关。假设一个分服同时连接服务器的客户端有5k,一台机器的socket网关能支持5w个玩家。因此网关需要参与服...