Как мне справиться с ошибками округления на дублях в vb.net?

Я пытаюсь сбалансировать набор значений валют с помощью vb.net. Итоговые значения для обоих этих значений представляются как двойные. В некоторых ситуациях я получаю ошибки округления.

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

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

  Dim nInvValue As Double
  Dim nCreditValue As Double

  For Each oReferenceItem In oMatchInvoices
     Dim nUnallocated As Double = oReferenceItem.DocumentOutstandingValue - oReferenceItem.DocumentAllocatedValue
     If ((nUnallocated <> 0) And (sReferenceValue = oReferenceItem.InstrumentNo)) Then
        iCount = iCount + 1
        If (oReferenceItem.IsDebit) And (nUnallocated > 0) Then
           nInvValue = nInvValue + nUnallocated
           InvoiceList.Add(nUnallocated.ToString("c"), oReferenceItem.URN.ToString)
        End If
        If (oReferenceItem.IsCredit) And (nUnallocated < 0) Then
           nCreditValue = nCreditValue - nUnallocated
           CreditList.Add(nUnallocated.ToString("c"), oReferenceItem.URN.ToString)
        End If
     End If
  Next

person seanyboy    schedule 09.10.2008    source источник


Ответы (2)


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

Возможно, вас заинтересует это обсуждение Decimal Vs. Двойной.

person TK.    schedule 09.10.2008

Попробуйте использовать десятичный тип.

MSDN - десятичный

person Inisheer    schedule 09.10.2008