怎么将text中文本转换成 double?比如1/2转换成0.5?

解决方案 »

  1.   

    Option Explicit
    Private Sub Command1_Click()
    Dim i
    i = Format(1 / 2, "0.0")
    Debug.Print i
    End Sub
      

  2.   

    可以自己写函数,也可以用script control
      

  3.   

    你们在那里乱写,hehe val是那么用的么?晕死了val("1/2")
      

  4.   

    回复人: nik_Amis(Azrael) ( ) 信誉:114  2004-01-05 15:45:00  得分:0 
     
     
      可以自己写函数,也可以用script control
      
      
     回复人: nik_Amis(Azrael) ( ) 信誉:114  2004-01-05 15:48:00  得分:0 
     
     
      你们在那里乱写,hehe val是那么用的么?晕死了val("1/2")
      

  5.   

    楼主是不是这个意思??函数明用了中文的,懒得改了vb计算字符串算式函数:Public Function 计算(GS As String) As String
        Dim i, n As Integer
        Dim TempGs, Temp As String
        Dim Vl() As String '操作数
        Dim Vls As Integer '操作数的数目
        Dim Si As Integer '上一操作符的位置
        Dim Ads, Sus, Mus, Bys, Lks, Rks As Integer     '操作符的数目
        Dim Adp(), Mup(), Byp(), Lkp(), Rkp() As Integer '操作符的位置
        Dim Adn(), Mun(), Byn() As Integer '操作符的排列次序
        Dim Sig() As Integer '每一个操作符的位置
        
    On Error GoTo Err
    Do While True
        ReDim Adp(Len(GS)), Mup(Len(GS)), Byp(Len(GS)) _
            , Lkp(Len(GS)), Rkp(Len(GS)) As Integer
        ReDim Adn(Len(GS)), Mun(Len(GS)), Byn(Len(GS)) _
            , Lkn(Len(GS)), Rkn(Len(GS)), Sig(Len(GS)) As Integer
        
        ReDim Vl(Len(GS))
        
        If Len(GS) = 0 Then GoTo Err
        If Mid(GS, Len(GS), 1) <> "#" Then
        
            TempGs = GS
            For i = 1 To Len(GS) '将减化加
                
                If Mid(GS, i, 1) = "-" And i <> 1 Then
                    If Mid(GS, i - 1, 1) <> "+" And Mid(GS, i - 1, 1) <> "-" _
                        And Mid(GS, i - 1, 1) <> "*" And Mid(GS, i - 1, 1) <> "/" Then
                        TempGs = Mid(TempGs, 1, i - 1 + n) + "+" + Mid(GS, i)
                        n = n + 1
                    End If
                    
                End If
            Next i
            GS = TempGs
            
            n = 0
            For i = 1 To Len(GS) '处理负负得正
                If Mid(GS, i, 1) = "-" Then
                    If Mid(GS, i + 1, 1) = "-" Then
                        TempGs = Mid(TempGs, 1, i - 1 - n) + Mid(GS, i + 2)
                        n = n + 2
                    End If
                End If
            Next i
            GS = TempGs
            GS = GS + "#"
        End If
        
        Vls = 1
        Ads = 0: Sus = 0: Mus = 0: Bys = 0: Lks = 0: Rks = 0
        
        For i = 1 To Len(GS)
            
            Select Case Mid(GS, i, 1)
                Case "+"
                    Ads = Ads + 1
                    Adp(Ads) = i
                    Adn(Ads) = Vls
                Case "*"
                    Mus = Mus + 1
                    Mup(Mus) = i
                    Mun(Mus) = Vls
                Case "/"
                    Bys = Bys + 1
                    Byp(Bys) = i
                    Byn(Bys) = Vls
                Case "("
                    Lks = Lks + 1
                    Lkp(Lks) = i
                   
                Case ")"
                    Rks = Rks + 1
                    Rkp(Rks) = i
                    
            End Select
            
            If Mid(GS, i, 1) = "+" Or Mid(GS, i, 1) = "*" Or _
                Mid(GS, i, 1) = "/" Or Mid(GS, i, 1) = "#" Then
                
                If Si + 1 = i And Mid(GS, i + 1, 1) <> "#" _
                     Then '操作符非法连续或以操作符开头
                    GoTo Err
                Else
                    Si = i
                End If
                
                If Not IsNumeric(Vl(Vls)) And Mid(GS, i + 1, 1) <> "#" _
                     Then '操作数不是数字
                    GoTo Err
                End If
                Sig(Vls) = i
                Vls = Vls + 1
                
            Else
                If Mid(GS, i, 1) <> "(" And Mid(GS, i, 1) <> ")" Then
                    Vl(Vls) = Vl(Vls) + Mid(GS, i, 1) '制作操作数
                Else
                  If i <> 1 Then
                    If ((Mid(GS, i - 1, 1) = "(" And Mid(GS, i, 1) = ")") Or _
                       (Mid(GS, i - 1, 1) = ")" And Mid(GS, i, 1) = "(")) _
                          Then '判定括号前后符号的合法性
                        GoTo Err
                    End If
                  End If
                End If
            End If
            
        Next i
        
        If Lks <> Rks Then
            GoTo Err '左右括号数是否匹配
        End If
        
        For i = 1 To Lks
            If Lkp(i) > Rkp(i) Then GoTo Err '左右括号出现顺序错误
        Next i
        
        If Lks <> 0 Then '括号处理
          Do While True
            For i = Lks To 1 Step -1
                For n = Rks To 1 Step -1
                    Temp = 计算(Mid(GS, Lkp(i) + 1, Rkp(n) - Lkp(i) - 1))
                    If Temp <> "公式有错误" Then
                        GS = Mid(GS, 1, Lkp(i) - 1) + Temp + Mid(GS, Rkp(n) + 1)
                        Exit Do
                    End If
                Next n
            Next i
            If Temp = "公式有错误" Then GoTo Err
                '括号中有错误退出
          Loop
        Else
            If Mus <> 0 Then '乘法处理
                GS = Mid(GS, 1, Sig(Mun(1) - 1)) + Trim(Str(Val(Vl(Mun(1))) _
                    * Val(Vl(Mun(1) + 1)))) + Mid(GS, Val(Mup(1)) + Len(Vl(Mun(1) _
                    + 1)) + 1)
            Else
                If Bys <> 0 Then '除法处理
                    GS = Mid(GS, 1, Sig(Byn(1) - 1)) + Trim(Str(Val(Vl(Byn(1))) _
                        / Val(Vl(Byn(1) + 1)))) + Mid(GS, Val(Byp(1)) + Len(Vl(Byn(1) _
                        + 1)) + 1)
                Else
                    If Ads <> 0 Then '加法处理
                        GS = Trim(Str(Val(Vl(1)) + Val(Vl(2)))) + Mid(GS, Val(Adp(1)) _
                            + Len(Vl(2)) + 1)
                    Else
                        计算 = Mid(GS, 1, Len(GS) - 1)
                        Exit Function
                    End If
                End If
            End If
        End If
    Loop
        
        
    Err:
        计算 = "公式有错误"
        
    End Function
      

  6.   

    Option Explicit
    Private Sub Command1_Click()
    Dim i
    i = Format(1 / 2, "0.0")
    Debug.Print i
    End Sub
      

  7.   

    问题是如何将text的文本保留为double型
    Dim i As Double
    i = Format(Text1.Text, "0.0")
    'i的值为37988
    如何解释啊
      

  8.   

    VB是编译型软件,没有这种函数,但VBSCRIPT有EVAL函数可以直接使用。
      

  9.   

    Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
    Dim sPrivate Sub Command1_Click()
    Dim res As Long
        Text1.Text = "1/2"
        res = EbExecuteLine(StrPtr(Me.Name & ".s=" & Me.Text1.Text), 0&, 0&, 0)
        MsgBox Format(s, "0.0")
    End Sub