使用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
答案 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