对不起,我只需要额外的一双眼睛,我是第二个猜测自己。我正在努力从经典的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))
答案 0 :(得分:3)
在我看来,您的C#代码可能存在问题:
Math.Pow((1d + interestRate) / 12d, ...)
你的VB6代码有:
(1 + m_dblInterestRate / 12) ^ ...
vb6对*和/运算符的优先级高于+和 - ,因此除法将在添加之前进行。但是,由于括号,在C#版本中不是这样(即添加将首先出现,然后是除法)。
答案 1 :(得分:1)
我不清楚有两个部分:
否则它看起来没问题,假设你的变量名称排成一行。
您可能希望实际测试这两个版本都有一些值,并确保它们相同。如果它们不同,请检查更好的舍入并未使您的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。那可能是错的。