2017-05-08 45 views
0

用途:在另一个平台和用户上输入两个分数,并使用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

相关问题