2009-04-01 2 views
0

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

strActualRate = 33,30
strProposed = 33,3

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

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

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

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

Заранее благодарен!

+0

Проясните логические ошибки. Отдает ли он «Оба не равны» или «Оба равны»? – Svante

+0

Извините, что это была ошибка типа Фактический вывод i получил Оба не равны – Shyju

ответ

3

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

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

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

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

+0

Если значения фактически являются строками (в отличие от того, что показывает код), это приведет к конвертации обоих значений в 33 перед их сопоставлением. Если бы значения были, например, «33,1» и «33,4», они также оказались бы равными. – Guffa

+0

Нет, двойники имеют десятичную часть. 'CDbl()' оставит их как 33.3. 'CInt()' будет конвертировать их в 33. –

0

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

1

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

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

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

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

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

If CDbl(strActualRate) <> CDbl(strProposed) Then 
    Response.Write "Both are not equal!" 
End If 
+0

Thanks Guffa, Ya Это была некоторая ошибка ввода для меня, когда я разместил здесь. На самом деле я просто искал метод конверсии – Shyju

0

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

Смежные вопросы