VB скрипт математическая функция - PullRequest
0 голосов
/ 01 апреля 2009

У меня есть страница ASP, где у меня есть 2 переменные, strActualRate и strProposed. Значения:

strActualRate = 33,30
strProposed = 33,3

Поэтому, когда я пишу следующую строку для сравнения:

if strActualRate <> strProposed  then
  Response.Writr "Both are not equal!"
end if

Я получаю вывод «Оба не равны», хотя оба одинаковы. Я уверен, что мне нужно использовать некоторую математическую функцию преобразования для сравнения.

Может кто-нибудь сказать мне, как решить эту проблему?

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 01 апреля 2009

Если я правильно понимаю, вы думаете, что эти два значения равны, но поскольку VBScript сравнивает строки, а не числа, оба возвращаются как не равные.

Вы правы в идее преобразования, а вот код:

if CDbl(strActualRate) <> CDbl(strProposed) then
     Response.Write "Both are not equal!"
end if

Это преобразует ваши строковые значения в числа для сравнения.

1 голос
/ 01 апреля 2009

Ваш вопрос на самом деле не складывается, поэтому я не совсем уверен, в чем проблема. Я постараюсь прояснить некоторые аспекты типов данных и сравнения.

Вы используете префикс "str" ​​для своих переменных, который предполагает, что вы намереваетесь хранить строковые значения в них, однако вместо этого вы храните в них числовые значения. Либо вы не понимаете, как венгерская нотация используется для отслеживания типа данных, либо опубликованный вами код не похож на код, который вы на самом деле используете.

Числовое значение 33,30 точно такое же, как и значение 33,3. Если бы вместо этого вы использовали строковые значения «33.30» и «33.3», это были бы две строки, которые не равны.

Если ваш код исправлен (Response.Write вместо Response.Writr) так, что он работает, он вообще не выдаст никакого вывода. Поскольку значения равны, условие в операторе if оценивается как ложное.

Если вы на самом деле назначаете строковые значения переменным, код выдаст «Оба не равны!». Это так же, как ожидалось, так как строки не равны. Если у вас есть строки и вы хотите сравнить их как числовые значения, вы должны преобразовать их:

If CDbl(strActualRate) <> CDbl(strProposed)  Then
  Response.Write "Both are not equal!"
End If
0 голосов
/ 01 апреля 2009

Вы собираетесь выполнить сравнение в виде строк, чисел с плавающей запятой или каким-либо другим способом? Если вы сравниваете их как строки, то ясно, что они не равны, так как один из них имеет дополнительный ноль на конце. Если вы сравниваете их как числа с плавающей запятой, то, как правило, вы хотите использовать сравнение, которое включает взятие разницы и проверку того, что она меньше некоторого небольшого значения. Это связано с тем, что вычисления чисел с плавающей запятой связаны с некоторой степенью неточности, и сравнение между ними может быть неудачным из-за базового представления.

0 голосов
/ 01 апреля 2009

Попробуйте привести значения к двойному в операторе сравнения с помощью CDbl ()

...