Что здесь не так MyPerfFee = (cdbl (TotforMonth) / 100) * cdbl (trim (perfFee))? - PullRequest
1 голос
/ 15 марта 2019

В ASP, что здесь не так:

MyPerfFee = (cdbl(TotforMonth)/100) * cdbl(trim(perfFee))

Я получаю ошибку:

Ошибка времени выполнения Microsoft VBScript '800a000d Несоответствие типов:' cdbl ' /client_services/admin/commscalc.asp, строка 48

1 Ответ

1 голос
/ 15 марта 2019

Проблема здесь в том, что TotforMonth или perfFee не являются числовыми значениями, насколько это касается VBScript. При работе с числовыми полями для внешнего источника (плоский файл, rdbms и т. Д.) всегда лучше проверять их перед попыткой вычислений.

Например

<%
'These values are to be used in a calculation quickly make sure we are dealing with numeric values.
If Len(TotforMonth) > 0 And IsNumeric(TotforMonth) Then TotforMonth = CDbl(TotforMonth) Else TotforMonth = 0
If Len(perfFee) > 0 And IsNumeric(perfFee) Then perfFee = CDbl(perfFee) Else perfFee = 0
%>

Вы можете изменить CDbl() на CLng() или CInt() в зависимости от того, с каким числовым типом вы хотите работать.

Очевидно, что если вы собираетесь использовать это часто, вы можете также создать функцию, которая сделает это за вас, что-то вроде:

<%
Function ConvertToNumeric(value, type, defaultValue)
  If Len(value) > 0 And IsNumeric(value) Then
    Select Case type
    Case vbDouble
      value = CDbl(value)
    Case Else
      '...
    End Select
  Else
    value = defaultValue
  End If
  ConvertToNumeric = value
End Function
%>

Тогда используйте это так;

<%
TotforMonth = ConvertToNumeric(totforMonth, vbDouble, 0)
perfFee = ConvertToNumeric(perfFee, vbDouble, 0)
%>

Код предоставляется без проверки


Полезные ссылки

...