Как я могу преобразовать десятичную дробь? - PullRequest
8 голосов
/ 01 апреля 2009

Как преобразовать неопределенное десятичное число (т. Е. 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

Ответы [ 13 ]

0 голосов
/ 01 апреля 2009

Вы пробовали эту рутину ?

0 голосов
/ 01 апреля 2009

Не всегда разрешимо, поскольку не все десятичные дроби являются дробями (например, PI или e).

Кроме того, перед преобразованием вам нужно округлить до десятичного знака некоторую длину.

0 голосов
/ 01 апреля 2009

1 / .3333333333 = 3, потому что 1/3 = .3333333333333, поэтому любое число, которое вы получаете, делает это,

double x = 1 / yourDecimal; int y = Math.Ceil (x);

и теперь отображается "1 /" + y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...