¿Cómo hago frente a los errores de redondeo en dobles en vb.net?
-
06-07-2019 - |
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
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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow