2009-04-01 4 views
0

2 개의 변수, strActualRatestrProposed이있는 ASP 페이지가 있습니다. 값은 다음과 같습니다VB 스크립트 수학 함수

strActualRate = 33.30
strProposed = 33.3

그래서 비교하기 위해 다음 줄을 쓸 때 :

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

내가 출력 "모두가 동일하지"를 얻고, 둘 다 동일하더라도. 필자는 비교할 수학적 변환 함수를 사용해야한다고 확신한다.

누구든지 해결 방법을 알려 줄 수 있습니까?

미리 감사드립니다.

+0

논리 오류를 해결하십시오. 그것은 "양쪽 모두가 동등하지 않다"또는 "양쪽 모두가 동등한"것을 되 돌리는가? – Svante

+0

죄송합니다. 실수로 입력했습니다. 실제 출력이 있습니다. 양쪽 모두가 동일하지 않습니다. – 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

아니요, double에는 소수 부분이 있습니다. 'CDbl()'은 33.3으로 남겨 둡니다. CInt()는 33으로 변환합니다. –

0

정말 최대 추가하지 않습니다 CDbl()

1

귀하의 질문과 함께 비교 문에 이중으로 값을 캐스팅하려고, 그래서 문제가 무엇인지 정말 모르겠어요. 나는 데이터 유형과 비교에 관한 몇 가지 사항을 정리하려고 노력할 것이다.

변수에 접두어 "str"을 사용하고 있습니다. 문자열 값을 저장하려는 의도가 있지만 대신 숫자 값을 저장합니다. hungarian 표기법을 사용하여 데이터 유형을 추적하는 방법에 대해 혼란 스럽거나 게시 한 코드가 실제로 사용하는 코드처럼 보이지 않습니다.

숫자 값 33.30은 값 33.3과 정확히 같습니다. 대신 문자열 값 "33.30"과 "33.3"을 사용하면 두 문자열이 같지 않습니다.

코드가 실행되도록 (Response.Writr 대신 Response.Write) 코드가 수정되면 결과가 전혀 생성되지 않습니다. 값이 동일하기 때문에 if 문의 조건은 false로 평가됩니다.

사실 변수에 문자열 값을 할당하면 코드에서 "둘 다 같지 않습니다!"가 출력됩니다. 이는 문자열이 동일하지 않기 때문에 예상대로입니다. 당신이 문자열을 가지고 수치로 비교하려는 경우, 당신은 그들을 comvert해야 :

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

고마워요 Guffa, 예. 여기에 게시 할 때 타이핑 실수였습니다. 사실 나는 단지 변환 방법을 찾고 있었어. – Shyju

0

당신은 소수점 숫자 또는 다른 방법을 떠, 문자열로 비교를 수행하려는 있습니까? 그것들을 문자열로 비교한다면 분명히 그것들 중 하나는 결국 0이됩니다. 부동 소수점 수로 비교하는 경우 일반적으로 차이를 가져 와서 작은 값보다 작은 지 확인하는 것이 좋습니다. 부동 소수점 계산에는 어느 정도의 부정확성이 포함되어 있으며 기본 표현으로 인해 이들 간의 비교가 실패 할 수 있기 때문입니다.