Pregunta

Estoy tratando de equilibrar un conjunto de valores de moneda usando vb.net. Los totales para ambos valores se convierten en un doble. Recibo errores de redondeo en algunas situaciones.

¿Cuál es la mejor manera de evitar esto? ¿Hay algún tipo que pueda usar con preferencia para duplicar? ¿Cómo redondeo el valor resultante a dos decimales?

Aquí está mi código, probablemente no necesito mostrarlo, pero por las dudas.

  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
¿Fue útil?

Solución

Para los cálculos financieros, creo que la sabiduría actual es usar decimales en lugar de dobles.

Quizás le interese esta discusión Decimal Vs. Doble .

Otros consejos

Intente usar el tipo Decimal.

MSDN - Decimal

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top