我是否正确翻译了这个?

时间:2009-10-09 21:26:32

标签: c# vb6

对不起,我只需要额外的一双眼睛,我是第二个猜测自己。我正在努力从经典的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))

4 个答案:

答案 0 :(得分:3)

在我看来,您的C#代码可能存在问题:

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

你的VB6代码有:

(1 + m_dblInterestRate / 12) ^ ...

vb6对*和/运算符的优先级高于+和 - ,因此除法将在添加之前进行。但是,由于括号,在C#版本中不是这样(即添加将首先出现,然后是除法)。

答案 1 :(得分:1)

我不清楚有两个部分:

  • 指数运算符的优先级(^)。
  • VB6会自动进行一些舍入

否则它看起来没问题,假设你的变量名称排成一行。

您可能希望实际测试这两个版本都有一些值,并确保它们相同。如果它们不同,请检查更好的舍入并未使您的C#代码实际上更多正确。

<强>更新
快速检查the docs会给出最高优先级。但是,这是VB.Net。我找不到vb6的文档,但StackOverflow agrees with it,所以我觉得你在那个部门也没问题。

答案 2 :(得分:1)

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

二进制和具有比除法更低的程度。我认为你将它与一元+运算符(+5 == 5)混淆,后者的执行程度高于除法。

答案 3 :(得分:0)

VB中的第一个因素是m_curAmountInvested,而在C#中它是currentAmountSaved。那可能是错的。