2012-01-03 11 views
12

Estoy construyendo un sitio de comercio electrónico integrado con PayPal.¿Forma correcta de redondeo para la conversión de moneda en Paypal?

Tomamos varias monedas, por lo que quiero asegurarme de que (por razones de contabilidad) estoy realizando correctamente los cálculos de conversión de moneda.

Después de multiplicar la conversión de moneda * la moneda original, siempre termino con muchos números detrás del punto decimal.

¿Hay una manera estándar de hacer esto? ¿Debería truncar o redondear? ¿Debo redondear varias veces en caso de que redondear el decimal de 1/1000 afecte el redondeo del decimal 1/100?

debería hacer algo como:

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

he estado teniendo problemas para encontrar buena información acerca de cómo se hace esto (esperemos que Estados Unidos y Europa son los mismos).

+0

Podría utilizar algún tipo de formato basado en el número de posiciones decimales que está obteniendo ...? – MethodMan

Respuesta

5

Debe utilizar Math.Round(x, 2, MidpointRounding.AwayFromZero)

+0

Este no es el "redondeo de los banqueros" mencionado anteriormente ... ¿Alguna idea? –

+0

Supongo que ya que estás haciendo la conversión de moneda, podría decirse que sería mejor que ustedes SIEMPRE recibieran una fracción de un centavo que no habría existido. –

+0

Bueno ... este fue el MÁS CERCANO a la respuesta. Después de hablar con el contador, supuestamente el truco es redondear desde 5 al calcular sus impuestos/IVA. De esa manera, siempre está seguro/seguro de que pagó sus impuestos. Tema ligeramente diferente de la publicación original, pero mi pregunta es respondida. –

3

yo supongo que sólo debe ser capaz de utilizar directamente como Math.Round .NET utiliza Bankers Rounding.

Sólo recuerde que siempre hacen redondeo ser absolutamente lo último que haces para no introducir errores de redondeo.

En un sistema de divisas como este, también almacenaría los valores reales sin redondear como decimales, además, para futuros propósitos de resolución de problemas.

1

si su sitio tiene varias monedas a continuación, utilizar esta a correctamente redonda decimales de acuerdo a la moneda y la cultura del usuario actual:

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