2009-10-09 3 views
1

죄송합니다. 여분의 눈이 필요합니다. 나는 두 번째로 추측하고 있습니다. 나는 고전적인 vb6에서 C#으로 번역 작업을하고 있지만 연산자 우선 순위에 대한 표를 찾았지만 올바르게 작동하지는 않습니다.정확하게 번역 했습니까?

VB6

= _ 
     m_curAmountInvested * (1 + m_dblInterestRate/12)^m_intMonthsToAttain + _ 
     m_curAddDeposits * ((1 + m_dblInterestRate/12)^m_intMonthsToAttain - 1)/(m_dblInterestRate/12) 

C#을

난에 명확하지 않다 두 부분이 있습니다
= (currentAmountSaved * Math.Pow((1d + interestRate)/12d, numberOfMonths)) + 
        ((monthlySavingsAmount * (Math.Pow((1d + interestRate)/12d, numberOfMonths) - 1d))/(interestRate/12d)) 

답변

3

나에게 보이는 :

Math.Pow((1d + interestRate)/12d, ...) 

귀하의 VB6 코드가 있습니다

(1 + m_dblInterestRate/12)^... 

VB6는 * 및/사업자에 비해위한 높은 우선 순위를 가지고 + 및 -, 그래서 나누기 전에 추가 발생합니다. 그러나 괄호로 인해 C# 버전에서는 그렇지 않습니다 (즉, 추가가 먼저오고 다음으로 나누기).

+0

ahhhh 그것이 문제가 될 것입니다! 많은 감사, 그 긴 하루였습니다. – Dave

1

:

  • 지수 연산자 (^)의 우선 순위는.
  • VB6 그렇지 않으면 그것은 당신의 변수 이름이 줄을 가정, 괜찮아 보이는 몇 가지 자동으로

반올림한다.

실제로 테스트 몇 가지 값으로 두 버전 모두 동일하게 나올 수 있습니다. 그리고 그들이 다르다면 더 나은 반올림으로 인해 C# 코드가 실제로 이 아니며 더 정확하게이 아닌지 확인하십시오.

는 업데이트 :
the docs의 빠른 검사^가장 높은 precendence을 제공합니다. 그러나 그것은 VB.Net입니다. vb6에 대한 문서를 찾을 수 없지만 StackOverflow agrees with it, 그래서 나는 그 부서에서도 괜찮다고 생각합니다.

+0

지수는 중첩 연산자보다 높은 모든 우선 순위에서 곱하기보다 우선 순위가 높습니다. – Noldorin

+0

연산자 우선 순위 섹션이 온라인 MSDN VB6 문서에서 삭제 된 것 같습니다. – MarkJ

0

VB의 첫 번째 요소는 m_curAmountInvested이며 C#에서는 currentAmountSaved입니다. 그것은 틀릴 수 있습니다. 여기에 귀하의 C# 코드에 문제가있을 수 있습니다처럼

+0

OP가 일반적으로 변수 이름에 의사 헝가리 표기법 인코딩을 가져온 것처럼 보이므로 의도적이라고 생각합니다. – jprete

+2

나는 투자 한 대 vs Saved가 아니라 헝가리어 vs를 의미한다 :) – alex

1

m_dblInterestRate + 1/12! = (1D interestRate +)/12D

이진 합 분할 이하 procedence있다. 제 생각에 당신은 단항 + 연산자 (+5 == 5)와 혼란 스럽습니다.

+0

다시 한 번 고맙습니다. – Dave