Como faço para lidar com erros de arredondamento em duplas no vb.net?
-
06-07-2019 - |
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
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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow