VB中如何将字符串转换成数值来运算

不是单独的转换如:

A="5+5+5"
print a
显示的是5+5+5

我需要让字符变成运算即print a 显示的是 15
问题补充:不是要简单的加法转换
如果a="5+5-5*5/5"

应该如何让他们运算出结果呢?

'使用下面提供给你的函数可以做到这点!
'先定义2个结构Parent和Plus,把这2个定义放在代码段最前面
Private Type Parent
s As String
value As Double
End Type
Private Type Plus
s As String
value As Double
End Type

'下面是实现此功能的函数的定义,比较长
Public Function ValueOfExpression(ByVal Express As String) As Double
Dim Pa() As Parent, ParNum As Integer, Ps() As Plus, OperNum As Integer
Dim str0 As String

'按括号分解表达式 Express:Begin-----/*
Dim lenExp As Integer, Lenstr1 As Integer, i As Integer, j As Integer, k As Integer, str1 As String, str2 As String, intPar As Integer
Dim intStart As Integer, intEnd As Integer
lenExp = Len(Express)
For i = 1 To lenExp
If Mid(Express, i, 1) = "(" Then intPar = intPar + 1
Next
ParNum = intPar
ReDim Pa((intPar / 10 + 1) * 10)
For i = 1 To intPar
If intPar < 1 Then Exit For
For j = 1 To lenExp
If Mid(Express, j, 1) = ")" Then
str1 = Mid(Express, 1, j - 1)
Exit For
End If
Next
Lenstr1 = Len(str1)
For k = 1 To Lenstr1
If Mid(str1, Lenstr1 + 1 - k, 1) = "(" Then
Pa(i).s = Mid(str1, Lenstr1 + 2 - k)
Exit For
End If
Next
Express = Mid(Express, 1, Lenstr1 - k) & Chr(128) & CStr(i) & Mid(Express, j + 1)
lenExp = Len(Express)
Next
Pa(0).s = Express
'*/-----End

'按加减号进一步分解:Begin-----/*
Dim n As Integer, strLeft As String
For i = 0 To ParNum
k = 0
For j = 1 To Len(Pa(i).s)
str1 = Mid(Pa(i).s, j, 1)
If str1 = "+" Or str1 = "-" Then k = k + 1
Next
If k > OperNum Then OperNum = k
Next
ReDim Ps(ParNum, OperNum)
For i = 0 To ParNum
strLeft = Pa(i).s: n = 0: str2 = ""
Do
If Len(strLeft) = 0 Then Exit Do
For j = 1 To Len(strLeft)
str1 = Mid(strLeft, j, 1)
If str1 = "+" Or str1 = "-" Then
Ps(i, n).s = str2 & Mid(strLeft, 1, j - 1)
n = n + 1
str2 = IIf(str1 = "-", str1, "")
strLeft = Mid(strLeft, j + 1)
Exit For
End If
If j = Len(strLeft) Then
Ps(i, n).s = str2 & strLeft: j = 0
Exit For
End If
Next
Loop Until j = 0
Next
'*/-----End

'计算最后分成的多个简单表达式的值的总和,即表达式 Express 的值
Dim Total As Double, value As Double
For i = 1 To ParNum + 1
If i = ParNum + 1 Then i = 0
Total = 0
For j = 0 To OperNum
Express = Ps(i, j).s: value = 0
Dim lasti As Integer, operator As String
lenExp = Len(Express): lasti = 0: operator = ""
For k = 1 To lenExp
str0 = Mid(Express, k, 1)
If InStr("*/^", str0) > 0 Or k = lenExp Then
If k = lenExp Then k = k + 1
str1 = Mid(Express, lasti + 1, k - 1 - lasti)
Dim sign As Integer, Valstr1 As Double
If Mid(str1, 1, 1) = "-" Then
sign = -1
str1 = Mid(str1, 2)
Else
sign = 1
End If
n = InStr(1, "/sin" & Chr(128) & "/cos" & Chr(128) & "/tan" & Chr(128) & "/abs" & Chr(128) & "/atn" & Chr(128) & "/exp" & Chr(128) & "/int" & Chr(128) & "/fix" & Chr(128) & "/sgn" & Chr(128) & "/sqr" & Chr(128) & "/", "/" & Mid(str1, 1, 4) & "/")
If n > 0 Then
Valstr1 = Choose((n + 4) / 5, Sin(Pa(Val(Mid(str1, 5))).value), Cos(Pa(Val(Mid(str1, 5))).value), Tan(Pa(Val(Mid(str1, 5))).value), Abs(Pa(Val(Mid(str1, 5))).value), Atn(Pa(Val(Mid(str1, 5))).value), Exp(Pa(Val(Mid(str1, 5))).value), Int(Pa(Val(Mid(str1, 5))).value), Fix(Pa(Val(Mid(str1, 5))).value), Sgn(Pa(Val(Mid(str1, 5))).value), Sqr(Pa(Val(Mid(str1, 5))).value))
Else
n = InStr(1, "/lg" & Chr(128) & "/ln" & Chr(128) & "/", Mid(str1, 1, 3))
If n > 0 Then
Valstr1 = Choose((n + 3) / 4, Log(Pa(Val(Mid(str1, 4))).value) / Log(10), Log(Pa(Val(Mid(str1, 4))).value))
Else
If Mid(str1, 1, 1) = Chr(128) Then
Valstr1 = Pa(Val(Mid(str1, 2))).value
ElseIf Right(str1, 1) = "!" Then
If Val(str1) = 0 Then
Valstr1 = 1
Else
Valstr1 = 1
For n = 1 To Val(str1)
Valstr1 = Valstr1 * n
Next
End If
Else
Valstr1 = Val(str1)
End If
End If
End If
Valstr1 = Valstr1 * sign
Select Case operator
Case ""
value = Valstr1
Case "*"
value = value * Valstr1
Case "/"
value = value / Valstr1
Case "^"
value = value ^ Valstr1
End Select
lasti = k: operator = str0
End If
Next
Ps(i, j).value = value
Total = Total + Ps(i, j).value
Next
Pa(i).value = Total
If i = 0 Then Exit For
Next
ValueOfExpression = Pa(0).value
End Function
'OK,到这里结束了该函数的定义
'使用例子:
'A="5+5+5"
'Print ValueOfExpression(A)

'其它说明:该函数支持很多数学函数如sin、cos、tan等等,如:
'Print ValueOfExpression("sin(1)")
'注意后面要加括号
'该函数支持运算符+-*/^!,还有括号,^为乘幂,其优先级与*/相同,这是使用该函数需要注意的地方;!为阶乘
'自己试试就知道怎么回事了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-09-26
解决的思路有一个(近似于白痴):
自编一个函数过程,将字符串里的运算符号和数字提取出来,按照函数中的四则运算规则(自编)运算出结果。

VB里好像没有能直接解决这个问题的函数或方法,如果没有那位高人指点迷津,我看也只能用这个方法解决了。

我是菜鸟我怕谁!
第2个回答  2006-09-26
A=CInt(5)+CInt(5)+CInt(5)或者
A=CStr(CInt(5)+CInt(5)+CInt(5))

vb字符串和数字转换功能
VB中,字符串与数字之间的转换是关键功能,本文总结了几个主要的转换方法。Str()与Val()用于字符串与数字之间的转换,例如Str(-459.65)返回“-459.65”,Str(459.001)返回“459.001”。Val()函数则可以将字符串转换为数值,如Val(“2457”)返回2457。Chr()与Asc()用于字符串与ASCII...

VB 怎样把字符串转化为数值啊?
最简单的就是直接转换,就是把字符串变量赋值给数值变量。\\x0d\\x0a数值变量=字符串\\x0d\\x0a\\x0d\\x0a如果必须转换,就使用 Val 函数赋值,会把字符串转换成双精度数。\\x0d\\x0a比如:数值变量=Val(字符串)\\x0d\\x0a例:\\x0d\\x0an = Val("3.5") ' 变量n赋值为3.5\\x0d\\x0...

vb语言中的val()函数是什么意思?如何使用?
使用val函数非常简单。你只需将包含数字信息的字符串作为参数传递给val函数即可。例如:vb Dim num As Double Dim str As String = "123.45"num = Val '将字符串str转换为数值型数据并赋值给变量num 在上述代码中,变量str包含了一个数值字符串"123.45",通过调用Val,我们将这个字符串转换为一个...

VB编程中VAL是什么意思?
VB编程中VAL是“Value”的缩写,表示将字符串转换为数值类型。在Visual Basic(VB)编程语言中,VAL函数用于将字符串表达式转换为一个双精度浮点数(Double)。这意味着,如果你有一个包含数字的字符串,你可以使用VAL函数将其转换为可以进行数学运算的数字类型。例如,假设你有一个字符串变量st...

怎样在VB中将文本转换成数值
1、首先在电脑中找到并打开VB软件,找到一句输出的函数。2、然后在其数组变量中,套上一个Str函数。3、这里注意函数的关键字,是没有区分大小写的。4、然后函数是可以多个嵌套使用。5、最后点击运行按钮,这样就可以成功运行测试,如下图所示,转换就完成了。

在VB中怎样才能把字符串当作算式来运算?
按以下方法即可Function Eval(ByVal Expressions As String) As String '文本运算vbs Dim Mssc As Object Set Mssc = CreateObject("MSScriptControl.ScriptControl") Mssc.Language = "vbscript" On Error GoTo EvalErr Eval = Mssc.Eval(Expressions) Exit FunctionEvalErr: Exit ...

在vb中怎么把输入的字符串转换为算式?
直接利用VB6提供的 Script Control 控件来做就行了,很简单又支持特别多的功能。如你所述要计算2*4,只需用此控件的eval方法,如 Ans=Script1.Eval("2*4") 就行了。当然用文本控件作为输入如:Ans=Script1.Eval(Text1.text) 。此控件支持复杂的数学运算式,同时也支持VB其它的属性、方法等的调用...

VB.NET中如何使string的011 +1 = string的012
在VB.NET中,直接将字符串进行加法运算得到的结果并不是预期的数值加和。例如,尝试进行 "011 + 1" 的运算,并期望得到 "012" 的结果,实际上并不成立,因为字符串并不支持数值运算。但是,我们可以通过以下方式来实现这个转换,使得“011 + 1”最终得到“012”的结果。首先,我们需要从文本框(...

vb 怎么将接收到的字符串转成数组
DIM B()AS BYTE REDIM B(LENB(STR1)-1)COPYMEMORY B(0),byval strptr(str1),lenb(str1)因为我是手机,copymemory的定义请自行百度 3.可以用STRCONV 至于转换为数字,不知道你的要求 。一个LONG数字占4字节,如果你是说把4个数据作为一个数字返回,也可以用COPYMEMORY.另一种更直观(但更慢)...

VB中怎样将字符串强制转化为数值
使用Cstr()函数,例如:Cstr("12345")就是把字符串"12345"转换成了数值 12345

相似回答