2008-10-09 63 views
2

我正在嘗試使用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 

回答

6

對於財務計算我認爲,目前的智慧是使用小數代替雙打。

您可能會對此討論感興趣Decimal Vs. Double