Member 14076249 Ответов: 4

Десятичные проблемы вычитания которые влияют на мою выходную кредитную систему


Я всегда получаю неправильное десятичное число в 3-й записи цикла i. Если я использую калькулятор, то получаю правильный результат, но если я помещаю его в excel, то получаю неправильный результат в десятичной системе счисления. что я хочу, так это иметь тот же результат в excel и моей системе

например.

я попробовал использовать десятичную дробь.Round(value,2) Да, это решает 2-ю запись от округления, но следующая проблема возникает в 3-й записи

[ Принципал: 773192.13 ] и значение, которое мне нужно показать, таково:
[ 773192.12 ] потому что это результат в excel и потому что он округляется для принципала, результат в балансе идет вверх

Это результат в excel, вы заметите, что я ставлю некоторые +1 или -1 -2 это результат в моей системе он продолжает вычитание или добавление у меня есть -0.05 в моем балансе в качестве конечного результата

[ Результат Excel ]
Основной Капитал: 765517.81 Проценты: 128000.00 Остаток Средств: 24834482.19
Основной Капитал: 769345.40 Проценты: 124172.41 Остаток Средств: 24065136.79
Основной Капитал: 773192.12 Проценты: 120325.68 Остаток Средств: 23291944.67
Основной Капитал: 777058.09 Проценты: 116459.72 Остаток Средств: 22514886.58
Основной Капитал: 780943.38 Проценты: 112574.43 Остаток Средств: 21733943.21
Основной Капитал: 780943.09 Проценты: 108669.72 Остаток Средств: 20949095.12


[ Системный Результат ]

Основной Капитал: 765517.81 Проценты: 128000.00 Остаток Средств: 24834482.19
Основной Капитал: 769345.40 Проценты: 124172.41 Остаток Средств: 24065136.79
Основной Капитал: 773192.13 +1 Проценты: 120325.68 Остаток Средств: 23291944.66 -1
Основной Капитал: 777058.09 Проценты: 116459.72 Остаток Средств: 22514886.57 -1
Основной Капитал: 780943.38 Проценты: 112574.43 Остаток Средств: 21733943.19 -2
Основной Капитал: 784848.09 Проценты: 108669.72 Остаток Средств: 20949095.11 -1

Что я уже пробовал:

below is my code.


Dim balance As Double = 25600000
Dim pmtmonthlyamortization As Double = 893517.81
Dim interestrate As Double = 6.0 / 100

Dim TotPmts As Double
Dim mprincipal As Double
Dim minterest As Double

TotPmts = CDbl(Val(5))

For i = 0 To TotPmts
minterest = Decimal.Round((balance * (interestrate / 12), 2 )
mprincipal = Decimal.Round((pmtmonthlyamortization - minterest), 2 )
balance = Decimal.Round((balance - mprincipal), 2 )

MessageBox.Show(minterest & vbNewLine & mprincipal & vbNewLine & vbNewLine & balance)
Next

4 Ответов

Рейтинг:
9

RickZeeland

Простой способ избежать ошибок округления-использовать в вычислении только целые числа, а для получения конечного результата разделить их на 100, чтобы получить десятичные дроби.


Рейтинг:
31

Richard MacCutchan

Почему вы перепостили этот вопрос? Я уже дал вам ответ.


Рейтинг:
23

Dave Kreskowiak

В ваших расчетах есть двойники. Это приводит к ошибкам в денежных расчетах из-за недостаточной точности. Если переменная будет касаться денежного значения или использоваться в денежном расчете, используйте Decimal вместо double, single или float.

У тебя куча двойных типов. Измените их все на десятичные и посмотрите, что произойдет.


Member 14076249

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

Dave Kreskowiak

Excel не использует две цифры после десятичной точки. Переформатируйте ячейки с числами, чтобы включить пять десятичных цифр, и у вас будет лучшее представление о точных числах, используемых (000 000,00 000) Для сравнения с числами в вашем собственном коде.

Двухзначный дисплей не является фактическим значением, используемым как в вашем собственном коде, так и в Excel!

Рейтинг:
17

Patrice T

Цитата:
Десятичные проблемы вычитания которые влияют на мою выходную кредитную систему

Первое правило займа: Стоимость кредита никогда не бывает точной.
Именно по этой причине последний платеж всегда нуждается в особом обращении.
lastpmtmonthlyamortization = lastbalance + lastminterest

Если Excel использует 893517.81 для каждого платежа, скорее всего, это не точное значение.
Таким образом, ваша проблема заключается в сравнении различных округлений между Excel и вашей программой.