2017-05-08 1 views
0

目的:別のプラットフォームおよびユーザによって入力された2つの分数をとり、IsNothingで評価します。それらが整数または変換可能な文字列でない場合は、Frac2Numを介して実行します(このコードは、Arecon DataのJeff Armsによって作成されたものです)。分数を整数に変換し、if文で除算してゼロのみを返します

次に、値A2が1より大きいかどうかを確認します。そうであれば、数学関数(A2/2) - (A1/2)を実行し、その値を返します。それ以外の場合は0を返します。

これまでのところ、0を返すことしかできませんでした。値を読み取る方法や、数式の後の値を返す方法が何であれ、私は思っています。

主な機能:

Public Function MyFunction(ByVal A1 As String, ByVal A2 As String) As Integer 
MyFunction= 0 
Try 
    Dim B1 As Double 
    Dim B2 As Double 


    If IsNothing(A1) Then Return 0 'If the user provides no values, return 0. 
    If IsNothing(A2) Then Return 0 'If the user provides no values, return 0. 

    If IsNumeric(A1) = True Then 
     B1 = CDbl(A1) 
    Else 
     B1 = Frac2Num(A1) 
    End If 'If the value is an integer or convertible string, convert value to double. If not, run through Frac2Num function. 

    If IsNumeric(A2) = True Then 
     B2 = CDbl(A2) 
    Else 
     B2 = Frac2Num(A2) 
    End If 

    If A2 > 1 Then 
     MyFunction= (A2/2) - (A1/2) 
     Return MyFunction 
    Else MyFunction= 0 
    End If 'If A2 is greater than one, then MyFunction = value created by equation. 

Catch ex As Exception 

End Try 

Frac2Num機能:

Function Frac2Num(ByVal X As String) As Double 
    Dim P As Integer, N As Double, Num As Double, Den As Double 
    X = Trim$(X) 
    P = InStr(X, "/") 
    If P = 0 Then 
     N = Val(X) 
    Else 
     Den = Val(Mid$(X, P + 1)) 
     If Den = 0 Then Error 11 ' Divide by zero 
     X = Trim$(Left$(X, P - 1)) 
     P = InStr(X, " ") 
     If P = 0 Then 
      Num = Val(X) 
     Else 
      Num = Val(Mid$(X, P + 1)) 
      N = Val(Left$(X, P - 1)) 
     End If 
    End If 
    If Den <> 0 Then 
     N = N + Num/Den 
    End If 
    Frac2Num = N 
End Function 

が戻る:すべての

Sub Main() 
    Dim result As Integer 

    result = MyFunction("8 1/2", "8 5/8") 'Function called with example values. 
    Console.WriteLine(result) 
    Console.ReadLine() 
End Sub 
+0

あなたはロジックが表示されます場所を確認してステッピングしようとしましたか?最初の質問には、IsNumericは複合(複合)分数でtrueを返しますか? CDBLは同じ値で動作しますか?また、このコードは.NETよりVBA-ishの方が多く見えます。 – Jeremy

答えて

0

まず、あなたのコードの最後に、あなたが分数を変換しようとしています文字列を直接数値に変換すると、魔法使いはあなたのコードに例外を生成させて、Catch blo CK

'You are using A1 and A2, change it to B1 and [email protected] 
If B2 > 1 Then 
    MyFunction = (B2 * 1.0/2) - (B1 * 1.0/2) 
    Return MyFunction 
Else : MyFunction = 0 
End If 

に変更して、あなたは整数を返すと整数に結果を代入しています。あなたの事例で結果が正しく計算されたとしても、正しく評価されません。 Doubleに変更すると解決します。

Public Function MyFunction(ByVal A1 As String, ByVal A2 As String) As Double 

Dim result As Double 
result = MyFunction("8 1/2", "8 5/8") 
+0

それはそれをしました!どうもありがとうございました! – WiseIdiot

+0

あなたは大歓迎です!あなたの質問に正解があれば、それを適切に回答してください。他のご質問がある場合は、解決策を見つけるお手伝いをいたします。 – AugustoQ

関連する問題