gpt4 book ai didi

vba - 如何将小数转换为分数?

转载 作者:行者123 更新时间:2023-12-01 18:11:14 28 4
gpt4 key购买 nike

如何将不定小数(即 .333333333...)转换为字符串分数表示形式(即“1/3”)。我正在使用 VBA,以下是我使用的代码(我在“b = a Mod b”行处收到溢出错误:

Function GetFraction(ByVal Num As Double) As String

If Num = 0# Then
GetFraction = "None"
Else
Dim WholeNumber As Integer
Dim DecimalNumber As Double
Dim Numerator As Double
Dim Denomenator As Double
Dim a, b, t As Double

WholeNumber = Fix(Num)
DecimalNumber = Num - Fix(Num)
Numerator = DecimalNumber * 10 ^ (Len(CStr(DecimalNumber)) - 2)
Denomenator = 10 ^ (Len(CStr(DecimalNumber)) - 2)
If Numerator = 0 Then
GetFraction = WholeNumber
Else
a = Numerator
b = Denomenator
t = 0

While b <> 0
t = b
b = a Mod b
a = t
Wend
If WholeNumber = 0 Then
GetFraction = CStr(Numerator / a) & "/" & CStr(Denomenator / a)
Else
GetFraction = CStr(WholeNumber) & " " & CStr(Numerator / a) & "/" & CStr(Denomenator / a)
End If
End If
End If
End Function

最佳答案

由于 .333333333 不是 1/3,因此如果不添加一些巧妙的“舍入”逻辑,您将永远不会得到 1/3,而是 333333333/1000000000。

这是我在学校时记得的处理具有周期性十进制表示形式的数字的解决方案。

数字 0.abcdabcd... 等于 abcd/9999。所以 0.23572357... 正好等于 2357/9999。因为你的模式很长,所以就取那么多的 9 即可。 0.11111... 等于 1/9,0.121212... 等于 12/99,依此类推。因此,尝试只搜索一个模式并将分母设置为相应的数字。当然,您必须在某些数字之后停止,因为您永远不知道该模式是永远重复还是只是多次重复。而且你会在最后一位数字上遇到舍入错误,所以你仍然需要一些聪明的逻辑。

关于vba - 如何将小数转换为分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706468/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com