当前位置:  开发笔记 > 后端 > 正文

如何将小数转换为分数?

如何解决《如何将小数转换为分数?》经验,为你挑选了2个好方法。

如何将无限小数(即.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

Daniel Brück.. 18

由于.333333333不是1/3,如果不添加一些聪明的"非舍入"逻辑,你将永远不会获得1/3,而是333333333/1000000000.

这是一个处理数字的解决方案,我记得从学校开始有周期性的小数表示.

数字为0. abcd abcd ...等于abcd/9999.所以0. 2357 2357 ......完全等于2357/9999.因为你的模式很长,所以要花很多9个.0 1 1111 ...等于1/9,0.12 1212 ...等于12/99,等等.因此,尝试只搜索模式并将分母设置为相应的数字.当然,你必须在一些数字之后停下来,因为你永远不会知道这个模式是永久重复还是只重复多次.并且您将在最后一位数字中遇到舍入误差,因此您仍需要一些聪明的逻辑.



1> Daniel Brück..:

由于.333333333不是1/3,如果不添加一些聪明的"非舍入"逻辑,你将永远不会获得1/3,而是333333333/1000000000.

这是一个处理数字的解决方案,我记得从学校开始有周期性的小数表示.

数字为0. abcd abcd ...等于abcd/9999.所以0. 2357 2357 ......完全等于2357/9999.因为你的模式很长,所以要花很多9个.0 1 1111 ...等于1/9,0.12 1212 ...等于12/99,等等.因此,尝试只搜索模式并将分母设置为相应的数字.当然,你必须在一些数字之后停下来,因为你永远不会知道这个模式是永久重复还是只重复多次.并且您将在最后一位数字中遇到舍入误差,因此您仍需要一些聪明的逻辑.



2> Oorang..:

这仅适用于Excel-VBA,但由于您将其标记为"VBA",我会建议它.Excel具有自定义"分数"格式,您可以通过"格式化单元格"(或者如果您愿意,可以使用ctrl-1)访问该格式.此特定数字格式是Excel特定的,因此不适用于VBA.Format函数.但它确实适用于Excel Formula TEXT().(这是与VBA.Format等效的Excel.这可以像So一样访问:

Sub Example()    
    MsgBox Excel.WorksheetFunction.Text(.3333,"# ?/?")
End Sub

要显示多个数字(例5/12),只需显示问号数量.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有