Я правильно перевел это? - PullRequest
       6

Я правильно перевел это?

1 голос
/ 10 октября 2009

Извините, мне просто нужен дополнительный набор глаз, я второй догадываюсь сам. Я работаю над переводом с классического 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 ]

3 голосов
/ 10 октября 2009

Похоже, у вас проблема с кодом C # здесь:

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

Ваш код VB6 имеет:

(1 + m_dblInterestRate / 12) ^ ...

vb6 имеет более высокий приоритет для операторов * и /, чем + и -, поэтому деление произойдет до добавления. Однако это не так в версии C # из-за круглых скобок (то есть, сначала будет добавление, а затем разделение).

1 голос
/ 10 октября 2009

1 + m_dblInterestRate / 12! = (1d + процентная ставка) / 12d

бинарная сумма имеет меньшую продолжительность, чем деление. Я думаю, что вы путаете это с унарным оператором + (+5 == 5), который имеет более высокую последовательность действий, чем деление.

1 голос
/ 10 октября 2009

Есть две части, которые мне не ясны:

  • Приоритет оператора степени (^).
  • VB6 автоматически выполняет некоторое округление

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

Возможно, вы захотите проверить обе версии с несколькими значениями и убедиться, что они получаются одинаковыми. И если они отличаются, проверьте, что лучшее округление не сделало ваш код C # на самом деле не больше правильно.

Обновление:
Быстрая проверка документов дает наивысший приоритет. Тем не менее, это VB.Net. Я не смог найти документы для vb6, но StackOverflow согласен с этим , и поэтому я думаю, что вы тоже в этом отделе.

0 голосов
/ 10 октября 2009

Первый фактор в VB - это m_curAmountInvested, а в C # - currentAmountSaved. Это может быть неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...