Pergunta

Estou tentando equilibrar um conjunto de valores de moeda usando o vb.net. Os totais para ambos os valores são fundidos como um duplo. Estou recebendo erros de arredondamento em algumas situações.

Qual é a melhor maneira de evitar isso? Existe um tipo que eu possa usar preferindo o dobro? Como faço para arredondar o valor resultante para dois lugares decimais?

Aqui está o meu código - provavelmente não preciso mostrar, mas apenas por precaução.

  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
Foi útil?

Solução

Para cálculos financeiros, acredito que a sabedoria atual é usar decimais em vez de duplas.

Você pode estar interessado nesta discussão Decimal vs. Dobro.

Outras dicas

Tente usar o tipo decimal.

Msdn - decimal

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top