经典的ASP,IIS 8.5,CINT CLNG无法正常工作

时间:2013-12-05 09:10:17

标签: asp-classic windows-8.1 iis-8

使用win 8.1重新安装了我的开发机器 启用ASP,安装我必须维护的旧网站,将站点安装为IIS中的应用程序,启用父路径,向浏览器发送错误,在错误页面中设置完整详细信息。一切都运作良好,除非我使用数字

我正在使用一个捕获用户输入的财务数据的系统,所以通常一个数字是:100.0或 100.000或 100或 100,00

所以我有一个功能(我过去曾在大量网站上使用过)将不规则性标准化为常量格式,例如100.00(即:正确的小数,总是使用点等)

此行现在在win 8.1 IIS 8.5上失败: 如果Cdbl(myString)= Cdbl(0)那么

Function ProperDecimal(s_String)
    Dim CharPlace, DotChar, iLoop, strCurrentChar, myString
    myString = TRIM(s_String)
    If ISNULL(myString) OR myString = "" Then myString = 0
    myString = REPLACE(myString,",",".")

    'Find where the comma or dot is, ie: 100.00 is in position 3 (from the right)
    CharPlace = 1
    DotChar = 0
    For iLoop = Len(Replace(myString, " ", "")) to 1 Step -1
        strCurrentChar = mid(Replace(myString, " ", ""), iLoop, 1)
        If strCurrentChar = "." OR strCurrentChar = "," Then
            DotChar = CharPlace
            Exit For
        End If
    CharPlace = CharPlace + 1
    Next

    'If string is zero, leave it at zero, we dont need 0.00
    If Cdbl(myString) = Cdbl(0) Then
        'ignore it, no decimal places needed
        ProperDecimal = myString
    Else
        'Where is the DOT
        Select Case DotChar
            Case 0 'eg: 100 will be converted to 100.00
                ProperDecimal = (myString & ".00")
            Case 1 'eg: 100. will be converted to 100.00
                ProperDecimal = (myString & "00")
            Case 2 'eg: 100.0 will be converted to 100.00
                ProperDecimal = (myString & "0")
            Case 3 'eg: 100.00 will remain
                ProperDecimal = (myString)
            Case Else '(4, 5, 6, 7, 8, etc) 'eg: 100.001
                ProperDecimal = ProperDecimal(Round(myString,2))
        End Select
    End If
End Function

Call ProperDecimal("112.05")

这导致我尝试除CDbl以外的其他方法

Response.write(isNumeric(s_String)) 'works, returns false because this is a string
Response.write(CINT(myString))
Response.write(CLNG(myString))
Response.write(CDBL(myString))

返回:

Microsoft VBScript运行时错误'800a000d' 类型不匹配:'CINT'

Microsoft VBScript运行时错误'800a000d' 类型不匹配:'CLNG'

Microsoft VBScript运行时错误'800a000d' 类型不匹配:'CDBL'

Microsoft VBScript运行时错误'800a000d' 类型不匹配:'CINT'

如果我然后更改If语句以将0转换为字符串,则它可以工作:

If myString = CSTR(0) Then

但我真的不想将字符串与字符串进行比较,特别是数字

这是现在发生的第二个项目。之前的项目我不得不将十进制逗号更改为fullstop(112,05必须是112.05)所以我认为它与区域设置有关,而逗号被列为十进制字符。但是现在我得到了不同的结果,它推动了我的问题。如果可以的话,请帮助我。 TA

1 个答案:

答案 0 :(得分:2)

服务器上的CInt工作正常(2008 R2),在客户端pc(Windows Xp和Windows 7)上,但在我的Windows 8机器上,这是一个问题。

我自己创建了两个函数,而不是CInt和CDbl。如果需要,你可以赚更多。非常简单且经过测试,

修改:

更改了更短版本的函数名称。更易于更换和使用。如果您进行搜索,也不会与Javascripts parseInt冲突

Function pInt(Str)
    Dim val : val = 0

    '==Test Comma=='
    On Error Resume Next
        val = CInt(Replace(Str, ".", ","))

    '==Test Period=='
    On Error Resume Next
        val = CInt(Replace(Str, ",", "."))

    On Error Goto 0
    pInt = val
End Function

Function pDbl(Str)
    Dim val : val = 0

    '==Test Comma=='
    On Error Resume Next
        val = CDbl(Replace(Str, ".", ","))

    '==Test Period=='
    On Error Resume Next
        val = CDbl(Replace(Str, ",", "."))

    On Error Goto 0
    pDbl = val
End Function

我不是ClassicASP / VBScript的专业人士,但这很有效。我喜欢我的C#ASP.net