关于自定义表达式的计算的类,请指点(VB2005代码)

123工艺品 2011-11-18 06:56:26
[code=VB.NET]
'自定义表达式的计算,可以处理括号、SIN 、COS、TAN 、CTAN、阶乘、倒数、
'常数PI、平方、立方、幂的计算、log、ln
'可以定义角度制或弧度制来计算三角函数
'阶乘计算要求数值小于等于160
'
'作者GYP 2011年4月

Public Class gypZDYBDS
Private mySubStr() As String '子字符串数组
Private myVal() As String '存放计算数数组
Private myCaozuoF() As String '存放操作符数组
Private caozuofNum As Integer = 0 '操作符数量
Private myJieGuo As String = "" '最后的结果
Public Huduzhi As Boolean = False '角度弧度设置开关,False为角度制
Private jieguoYN As String = "" '返回计算结果是否正确
Public Function gypJieGuo(ByVal s As String) As String
If s = "" Then
myJieGuo = "没有什么可计算的"
Else
fenjieKhtoJS(s)
End If
Return myJieGuo
End Function
Private Function canJiS(ByVal s As String) As Boolean
'判断字符串长度及左、右括号数量,若字符串长度小于3或者左、右括号数量不相等,则返回“false”
Dim i As Integer
Dim zuokhnum, youkhnum As Integer '左括号及右括号数量
If s.Length >= 3 Then
zuokhnum = 0
youkhnum = 0
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "(" Then zuokhnum += 1
If s.Substring(i, 1) = ")" Then youkhnum += 1
Next
If zuokhnum <> youkhnum Then
Return False
Else
Return True
End If
Else
If ynCF(s) Then
Return False
Else
If s.Length = 1 And ynSZ(s) Then
Return True
ElseIf s.Substring(0, 1) = "-" And ynSZ(s.Substring(1, s.Length - 1)) Then '字符串长度为2的负数
Return True
ElseIf s.Substring(1, 1) = "!" And ynSZ(s.Substring(0, 1)) Then '字符串长度为2的阶乘
Return True
Else
Return False
End If

End If
End If
End Function
Private Function ynCF(ByVal s As String) As Boolean
'判断一个字符串是否为操作符
Return False
Select Case s.Length
Case 0
Return False
Case 1
If s = "+" Or s = "-" Or s = "*" Or s = "/" Or s = "!" Or s = "^" Then Return True

Case 2
If s = "ln" Then Return True

Case 3
If s = "sin" Or s = "cos" Or s = "tan" Or s = "log" Then Return True

Case 4
If s = "ctan" Then Return True
Case Else
Return False
End Select
End Function
Private Sub fenjieKhtoJS(ByVal s As String)
'把一个字符串按括号进行分解,并计算结果
myJieGuo = ""
jieguoYN = ""
If canJiS(s) Then
Else
jieguoYN = "error,please check:括号不对"
myJieGuo = jieguoYN
Exit Sub
End If
If s.Substring(0, 1) = "-" Then '对于第一个字符为负号的字符串,进行转换
s = "0" & s
End If
Dim i As Integer
Dim khnum As Integer = 0
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "(" Then khnum += 1
Next
Dim kk As String = "" '记录括号位置
If khnum = 0 Then '如果没括号

myJieGuo = myJS(s)
Else

ReDim mySubStr(khnum)
'MsgBox(khnum)
Dim myloopnum As Integer = 0

Dim s1 As String = s
Do While myloopnum < khnum '按括号数进行循环
myloopnum += 1
Dim ykhPo As Integer = 0 '右括号位置
Dim zkhPo As Integer = 0 '左括号位置
Dim ia As Integer = 0
Do While ykhPo = 0
ia += 1
If s.Substring(ia, 1) = ")" Then ykhPo = ia
Loop

For ia = ykhPo To 1 Step -1
If s.Substring(ia, 1) = "(" Then
zkhPo = ia
Exit For
End If
Next
mySubStr(myloopnum - 1) = s.Substring(zkhPo + 1, ykhPo - zkhPo - 1)
Dim AA As String
AA = myJS(mySubStr(myloopnum - 1))
s = s.Substring(0, zkhPo) & AA & s.Substring(ykhPo + 1, s.Length - 1 - ykhPo)
kk += Str(zkhPo) & Str(ykhPo) & vbCrLf & s & vbCrLf
Loop

End If

myJieGuo = myJS(s)
Dim ss As String = ""
For i = 0 To khnum - 1
ss += mySubStr(i) & vbCrLf
Next
If jieguoYN Is "" Then
Else
myJieGuo = jieguoYN

End If
' MsgBox("共有括号:" & Str(khnum) & vbCrLf & ss & vbCrLf & kk & vbCrLf)
End Sub
Private Function myJS(ByVal S As String) As String
'计算一个不带括号的字符串
Dim i As Integer = 0
Dim j As Integer = 0
Dim kk As Integer = 0
Dim k As String = ""
myJS = ""
If S = "" Then
myJS = "X"
''ElseIf S.Substring(0, 1) = "-" And (ynSZ(S.Substring(1, S.Length - 1)) = True) Then
''myJS = S
''ElseIf S.Substring(0, 1) = "-" Then
'' S = "0" & S
Else
fengeS(S)

If caozuofNum = 0 Then
myJS = jbJS(myVal(0))
Else

Dim cF2 As Integer = 0
Dim cF1 As Integer = 0
Dim cF As Integer = 0
For i = 0 To caozuofNum - 1 '分别取得 ^ 及 * 、/ 的数量
If myCaozuoF(i) = "^" Then cF2 += 1
If myCaozuoF(i) = "*" Or myCaozuoF(i) = "/" Then cF1 += 1
Next
cF = caozuofNum - cF1 - cF2
k += Str(cF2 + cF1) & vbCrLf & Str(caozuofNum) & vbCrLf
If cF2 = 0 Then
Else
For kk = 0 To cF2 - 1
For i = 0 To caozuofNum - 1
If myCaozuoF(i) = "^" Then
myVal(i) = yiCaozuoF(jbJS(myVal(i)), "^", jbJS(myVal(i + 1))).ToString
j = i
Do Until j >= caozuofNum - 1
j += 1
myVal(j) = myVal(j + 1)
myCaozuoF(j - 1) = myCaozuoF(j)
Loop
Exit For
End If
Next
Next

End If

If cF1 = 0 Then
Else
For kk = 0 To cF1 - 1
For i = 0 To caozuofNum - 1 - cF2
If myCaozuoF(i) = "*" Or myCaozuoF(i) = "/" Then
myVal(i) = yiCaozuoF(jbJS(myVal(i)), myCaozuoF(i), jbJS(myVal(i + 1))).ToString
j = i
Do Until j >= caozuofNum - 1
j += 1
myVal(j) = myVal(j + 1)
myCaozuoF(j - 1) = myCaozuoF(j)
Loop
Exit For
End If
Next
Next

End If

For kk = 0 To cF - 1
For i = 0 To caozuofNum - 1 - cF2 - cF1
If myCaozuoF(i) = "+" Or myCaozuoF(i) = "-" Then
myVal(i) = yiCaozuoF(jbJS(myVal(i)), myCaozuoF(i), jbJS(myVal(i + 1))).ToString
j = i
Do Until j >= caozuofNum - 1
j += 1
myVal(j) = myVal(j + 1)
myCaozuoF(j - 1) = myCaozuoF(j)
Loop
Exit For
End If
Next
Next
myJS = myVal(0)
For i = 0 To caozuofNum - 1
k += myVal(i) & vbCrLf & myCaozuoF(i) & vbCrLf
Next
k += myVal(caozuofNum)

' MsgBox(k)
End If
End If
Return myJS

End Function
Private Function yiCaozuoF(ByVal a As Double, ByVal f As String, ByVal b As Double) As Double
'+、-、*、/、^ 操作符的基本计算
Select Case f
Case "+"
yiCaozuoF = a + b
Case "-"
yiCaozuoF = a - b
Case "*"
yiCaozuoF = a * b
Case "/"
If b = 0 Then
jieguoYN = "error,please check! 除数为零了!!"
Else
yiCaozuoF = a / b
End If
Case "^"
If b < 1 And b > -1 And b <> 0 Then
If ((1 / b) Mod 2) <> 0 Then
If a < 0 Then
yiCaozuoF = -(-a) ^ b
Else
yiCaozuoF = a ^ b
End If
Else
If a < 0 Then
jieguoYN = "error,please check!幂的底数为负了"
Else
yiCaozuoF = a ^ b
End If

End If
Else
yiCaozuoF = a ^ b
End If

Case Else
yiCaozuoF = 0
End Select
Return yiCaozuoF
End Function
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenggang999 2011-11-18
  • 打赏
  • 举报
回复
我认为用正则表达式提取的话,运算速度会非常快,且代码也会很剪短.
下面给一个我写的复数表达式的计算。支持复数变量表达式的运算.
复数运算解析表达式
gxingmin 2011-11-18
  • 打赏
  • 举报
回复
我以前自己写了一个公式解析代码,跟楼主分享一下,C#代码

using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Text;
using System.Reflection;
public class Evaluator
{
object _compiled = null;

/// <summary>
/// 计算公式
/// </summary>

public Evaluator()
{
}

private bool constructEvaluator(string formula, Type returnType)
{
string strTypeName = returnType.Name;

ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");

cp.GenerateExecutable = false;
cp.GenerateInMemory = true;

StringBuilder str = new StringBuilder();
str.Append("using System; \n");
str.Append("namespace Boffin.Windows.Controls { \n");
str.Append("public class Formula { \n");

str.AppendFormat(" public {0} GetValue()", strTypeName);
str.Append("{");
str.AppendFormat(" return Convert.To" + strTypeName + "({0}); ", formula);
str.Append("}\n");
str.Append("}\n");
str.Append("}");

CompilerResults cr = compiler.CompileAssemblyFromSource(cp, str.ToString());
if (cr.Errors.HasErrors)
{
return false;
}
Assembly a = cr.CompiledAssembly;
_compiled = a.CreateInstance("Boffin.Windows.Controls.Formula");
return true;

}

public double ExecuteToDouble(string formula)
{
if (constructEvaluator(formula, typeof(double)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (Double)m.Invoke(_compiled, null);
}

public static double GetDoubleValue(string formula)
{
return new Evaluator().ExecuteToDouble(formula);
}


public float ExecuteToSingle(string formula)
{
if (constructEvaluator(formula, typeof(float)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (float)m.Invoke(_compiled, null);
}

public static Single GetSingleValue(string formula)
{
return new Evaluator().ExecuteToSingle(formula);
}


public Decimal ExecuteToDecimal(string formula)
{
if (constructEvaluator(formula, typeof(Decimal)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (Decimal)m.Invoke(_compiled, null);
}

public static Decimal GetDecimalValue(string formula)
{
return new Evaluator().ExecuteToDecimal(formula);
}


public bool ExecuteToBoolean(string formula)
{
if (constructEvaluator(formula, typeof(bool)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (bool)m.Invoke(_compiled, null);
}

public static bool GetBooleanValue(string formula)
{
return new Evaluator().ExecuteToBoolean(formula);
}


public Int16 ExecuteToInt16(string formula)
{
if (constructEvaluator(formula, typeof(Int16)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (Int16)m.Invoke(_compiled, null);
}

public static Int16 GetInt16Value(string formula)
{
return new Evaluator().ExecuteToInt16(formula);
}


public Int32 ExecuteToInt32(string formula)
{
if (constructEvaluator(formula, typeof(Int32)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (Int32)m.Invoke(_compiled, null);
}

public static Int32 GetInt32Value(string formula)
{
return new Evaluator().ExecuteToInt32(formula);
}


public Int64 ExecuteToInt64(string formula)
{
if (constructEvaluator(formula, typeof(Int64)) == false)
throw new Exception("计算\"" + formula + "\"表达式错误!");

MethodInfo m = _compiled.GetType().GetMethod("GetValue");
return (Int64)m.Invoke(_compiled, null);
}

public static Int64 GetInt64Value(string formula)
{
return new Evaluator().ExecuteToInt64(formula);
}



}



//测试
Console.WriteLine(Evaluator.GetDoubleValue("Math.Sin(12.23)+Math.Cos(15.2)"));
Console.WriteLine(Evaluator.GetInt16Value("12.23+15.2"));
Console.WriteLine(Evaluator.GetInt32Value("12.23+15.2"));
Console.WriteLine(Evaluator.GetInt64Value("12.23+15.2"));
Console.WriteLine(Evaluator.GetBooleanValue("12.23+15.2>10.3"));
Console.WriteLine(Evaluator.GetSingleValue("12.23+15.2"));


输出:
-1.20380026600088
27
27
27
True
27.43
宝_爸 2011-11-18
  • 打赏
  • 举报
回复
感谢lz分享。
123工艺品 2011-11-18
  • 打赏
  • 举报
回复
Private Sub fengeS(ByVal s As String)
'按 +、-、*、/、^分割字符串
Dim i As Integer = 0
Dim k As String = s & vbCrLf
Dim kk As String = s & vbCrLf
Dim myVal1() As String
Dim myCaozuoF1() As String
caozuofnum = 0
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "+" Or s.Substring(i, 1) = "-" Or s.Substring(i, 1) = "*" Or s.Substring(i, 1) = "/" Or s.Substring(i, 1) = "^" Then
caozuofnum += 1
End If
Next

If caozuofnum = 0 Then
ReDim myVal(1)
ReDim myCaozuoF(1)
myCaozuoF(0) = "K"
myVal(0) = s
Else

ReDim myVal1(caozuofnum)
ReDim myCaozuoF1(caozuofnum - 1)
Dim loopnum As Integer = 0
Dim caozfPo As Integer = 0
Do
loopnum += 1
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "+" Or s.Substring(i, 1) = "-" Or s.Substring(i, 1) = "*" Or s.Substring(i, 1) = "/" Or s.Substring(i, 1) = "^" Then
caozfPo = i
Exit For
End If
Next
myVal1(loopnum - 1) = s.Substring(0, caozfPo)
myCaozuoF1(loopnum - 1) = s.Substring(caozfPo, 1)
s = s.Substring(caozfPo + 1, s.Length - caozfPo - 1)
k += myVal1(loopnum - 1) & vbCrLf & myCaozuoF1(loopnum - 1) & vbCrLf
If loopnum = caozuofnum Then
myVal1(loopnum) = s.Substring(0, s.Length)
k += myVal1(loopnum)
End If
Loop While loopnum < caozuofnum
' MsgBox(k)
'以下为处理减号
Dim fuhaonum As Integer = 0
For i = 0 To caozuofnum
If myVal1(i) = "" Or myVal1(i) = "+" Or myVal1(i) = "-" Or myVal1(i) = "/" Or myVal1(i) = "*" _
Or myVal1(i) = "^" Or myVal1(i) = "ln" Or myVal1(i) = "sin" Or myVal1(i) = "cos" Or myVal1(i) = "tan" _
Or myVal1(i) = "log" Or myVal1(i) = "ctan" Then
fuhaonum += 1
End If
Next
If fuhaonum = 0 Then '无效的负号操作符数量为零
ReDim myVal(caozuofnum)
ReDim myCaozuoF(caozuofnum - 1)
For i = 0 To caozuofnum - 1
myVal(i) = myVal1(i)
myCaozuoF(i) = myCaozuoF1(i)
Next
myVal(caozuofnum) = myVal1(caozuofnum)
Else
ReDim myVal(caozuofnum - fuhaonum)
ReDim myCaozuoF(caozuofnum - 1 - fuhaonum)
Dim j As Integer = 0
Dim kka As Integer = 0
For kka = 0 To fuhaonum - 1
For i = 0 To caozuofnum - 1
If myVal1(i) = "" Or myVal1(i) = "+" Or myVal1(i) = "-" Or myVal1(i) = "/" Or myVal1(i) = "*" _
Or myVal1(i) = "^" Or myVal1(i) = "ln" Or myVal1(i) = "sin" Or myVal1(i) = "cos" Or myVal1(i) = "tan" _
Or myVal1(i) = "log" Or myVal1(i) = "ctan" Then
myVal1(i) = myVal1(i) & myCaozuoF1(i) & myVal1(i + 1)
j = i
Do Until j >= caozuofnum - 1
j += 1
myVal1(j) = myVal1(j + 1)
myCaozuoF1(j - 1) = myCaozuoF1(j)
Loop
Exit For
End If
Next
Next
For i = 0 To caozuofnum - 1 - fuhaonum
myVal(i) = myVal1(i)
myCaozuoF(i) = myCaozuoF1(i)
Next
myVal(caozuofnum - fuhaonum) = myVal1(caozuofnum - fuhaonum)

End If
kk += Str(caozuofnum - 1 - fuhaonum) & vbCrLf
For i = 0 To caozuofnum - 1 - fuhaonum
kk += myVal(i) & vbCrLf & myCaozuoF(i) & vbCrLf
Next
kk += myVal(caozuofnum - fuhaonum)
caozuofnum -= fuhaonum '重置操作符数值
End If
'MsgBox(kk)
End Sub
Private Function ynSZ(ByVal s As String) As Boolean
'判断一个字符串是否全部为数字及小数点,有2个小数点则不是有效的
Dim i As Integer
Dim dotnum As Integer = 0
Dim fuhaonum As Integer = 0
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "." Then dotnum += 1
Next
For i = 0 To s.Length - 1
If s.Substring(i, 1) = "-" Then fuhaonum += 1
Next

ynSZ = True
For i = 0 To s.Length - 1
Select Case s.Substring(i, 1)
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "-"

Case Else
ynSZ = False
End Select
Next

If dotnum > 1 Or fuhaonum > 1 Then ynSZ = False
If s.Length > 1 Then
If fuhaonum = 1 And s.Substring(0, 1) <> "-" Then ynSZ = False
Else
If s = "" Or s = "-" Or s = "." Then ynSZ = False

End If
If s = "0" Or s = "1" Or s = "2" Or s = "3" Or s = "4" Or s = "5" Or s = "6" Or _
s = "7" Or s = "8" Or s = "9" Then ynSZ = True
End Function
End Class

[/code]
PS:注意,运用时应提供三角函数是角度还是弧度制。
本人用着还行,欢迎提意见!谢谢!
123工艺品 2011-11-18
  • 打赏
  • 举报
回复
Private Function jbJS(ByVal s As String) As Double
'基本的计算,处理函数,把字符串转成浮点数
Dim i As Integer = 0
jbJS = 0
If s = "PIX" Then jbJS = System.Math.PI '常数π
If s.Length = 1 And ynSZ(s) Then
jbJS = Val(s)
Else
If s.Length > 1 Then
If s.Substring(s.Length - 1, 1) = "!" And ynSZ(s.Substring(0, s.Length - 1)) Then '计算阶乘
If (Val(s.Substring(0, s.Length - 1)) Mod 1) = 0 And Val(s.Substring(0, s.Length - 1)) < 160 And Val(s.Substring(0, s.Length - 1)) >= 0 Then
If Val(s.Substring(0, s.Length - 1)) >= 160 Then jieguoYN = "error,please check!数太大"
If Val(s.Substring(0, s.Length - 1)) < 0 Then jieguoYN = "error,please check!负数"
If Val(s.Substring(0, s.Length - 1)) = 0 Then
jbJS = 1
Else
jbJS = 1
For i = 1 To Val(s.Substring(0, s.Length - 1)) Step 1
jbJS *= i
Next
End If
End If
Else
If (s.Substring(0, 1) = "-" And ynSZ(s.Substring(1, 1))) Or ynSZ(s.Substring(0, 1)) Then
jbJS = Val(s)
End If
End If

End If
If s.Length > 2 Then
If s.Substring(0, 2) = "ln" And ynSZ(s.Substring(2, s.Length - 2)) Then
jbJS = System.Math.Log(Val(s.Substring(2, s.Length - 2)))
End If
End If
If s.Length > 3 Then
If s.Substring(0, 3) = "log" And ynSZ(s.Substring(3, s.Length - 3)) Then
jbJS = System.Math.Log10(Val(s.Substring(3, s.Length - 3)))
End If

If s.Substring(0, 3) = "-ln" And ynSZ(s.Substring(3, s.Length - 3)) Then
jbJS = -System.Math.Log(Val(s.Substring(3, s.Length - 3)))
End If
If Huduzhi = False Then '角度制计算
If s.Substring(0, 3) = "sin" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Sin(Val(s.Substring(3, s.Length - 3)) / 180 * System.Math.PI)
End If
If s.Substring(0, 3) = "cos" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Cos(Val(s.Substring(3, s.Length - 3)) / 180 * System.Math.PI)
End If
If s.Substring(0, 3) = "tan" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Tan(Val(s.Substring(3, s.Length - 3)) / 180 * System.Math.PI)
End If
Else

If s.Substring(0, 3) = "sin" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Sin(Val(s.Substring(3, s.Length - 3)))
End If
If s.Substring(0, 3) = "cos" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Cos(Val(s.Substring(3, s.Length - 3)))
End If
If s.Substring(0, 3) = "tan" And ynSZ(s.Substring(3, s.Length - 3)) = True Then
jbJS = System.Math.Tan(Val(s.Substring(3, s.Length - 3)))
End If
End If
End If
If s.Length > 4 Then
If Huduzhi = False Then '角度制计算
If s.Substring(0, 4) = "ctan" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = System.Math.Tan(1 / Val(s.Substring(4, s.Length - 4)) / 180 * System.Math.PI)
End If
Else
If s.Substring(0, 4) = "ctan" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = System.Math.Tan(1 / Val(s.Substring(4, s.Length - 4)))
End If
End If
If s.Substring(0, 4) = "-log" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Log10(Val(s.Substring(4, s.Length - 4)))
End If
If Huduzhi = False Then '角度制计算
If s.Substring(0, 4) = "-sin" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Sin(Val(s.Substring(4, s.Length - 4)) / 180 * System.Math.PI)
End If
If s.Substring(0, 4) = "-cos" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Cos(Val(s.Substring(4, s.Length - 4)) / 180 * System.Math.PI)
End If
If s.Substring(0, 4) = "-tan" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Tan(Val(s.Substring(4, s.Length - 4)) / 180 * System.Math.PI)
End If

Else

If s.Substring(0, 4) = "-sin" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Sin(Val(s.Substring(4, s.Length - 4)))
End If
If s.Substring(0, 4) = "-cos" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Cos(Val(s.Substring(4, s.Length - 4)))
End If
If s.Substring(0, 4) = "-tan" And ynSZ(s.Substring(4, s.Length - 4)) = True Then
jbJS = -System.Math.Tan(Val(s.Substring(4, s.Length - 4)))
End If

End If
End If
If s.Length > 5 Then
If Huduzhi = False Then '角度制计算
If s.Substring(0, 5) = "-ctan" And ynSZ(s.Substring(5, s.Length - 5)) = True Then
jbJS = -System.Math.Tan(1 / Val(s.Substring(5, s.Length - 5)) / 180 * System.Math.PI)
End If
Else
If s.Substring(0, 5) = "-ctan" And ynSZ(s.Substring(5, s.Length - 5)) = True Then
jbJS = -System.Math.Tan(1 / Val(s.Substring(5, s.Length - 5)))
End If
End If
End If
End If
Return jbJS

End Function

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧