2012-01-03 23 views
12

Sto costruendo un sito di e-commerce integrato con paypal.Modo corretto per arrotondare la conversione di valuta in Paypal?

Prendiamo più valute, quindi voglio assicurarmi che (per ragioni contabili) eseguo correttamente qualsiasi calcolo matematico per la conversione di valuta.

Dopo aver moltiplicato la conversione di valuta * la valuta originale, finisco sempre con un sacco di numeri finali dopo il punto decimale.

Esiste un modo standard per farlo? Devo troncare o arrotondare? Devo arrotondare più volte nel caso in cui l'arrotondamento del decimale 1/1000 influenzi l'arrotondamento del decimale 1/100?

dovrei fare qualcosa di simile:

Math.Round(Math.Round(x, 3), 2) 

Ho avuto problemi a trovare una buona informazione su come questo viene fatto (si spera Uniti e in Europa sono gli stessi).

+0

Potrebbe utilizzare una sorta di formattazione in base alla numero di posizioni decimali che stai ottenendo ..? – MethodMan

risposta

5

Si dovrebbe usare Math.Round(x, 2, MidpointRounding.AwayFromZero)

+0

Questo non è il "giro dei banchieri" di cui sopra ... qualche pensiero? –

+0

Suppongo che dal momento che stai facendo la conversione di valuta questo potrebbe essere probabilmente meglio che voi ragazzi otterreste SEMPRE una frazione di un centesimo che non sarebbe esistito. –

+0

Beh ... questo è stato il più vicino alla risposta. Dopo aver parlato con il contabile, si presume che il trucco sia arrotondare sempre da 5 quando si calcolano le tasse/IVA. In questo modo, sei sempre sicuro/sicuro che hai pagato le tasse. Argomento leggermente diverso dal post originale - ma la mia domanda ha una risposta. –

3

Parto dal presupposto si dovrebbe solo essere in grado di utilizzare direttamente Math.round come .NET utilizza Bankers Rounding.

Basta ricordarsi di fare sempre l'arrotondamento essere l'assoluta ultima cosa che fai di non introdurre errori di arrotondamento.

In un sistema di valuta come questo, vorrei anche memorizzare i valori reali non arrotondati come decimali in aggiunta per futuri scopi di risoluzione dei problemi.

1

se il sito ha più valute quindi utilizzare questo correttamente rotonda decimali in base alla valuta e la cultura dell'utente corrente:

int currencyDecs = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits; 
decimal roundedDecimalPrice = Math.Round(decimalPrice, currencyDecs, MidpointRounding.AwayFromZero); 
Problemi correlati