Надлежащий способ сделать округление для конвертации валюты в Paypal? - PullRequest
13 голосов
/ 03 января 2012

Я создаю сайт электронной коммерции, интегрированный с PayPal.

Мы принимаем несколько валют, поэтому я хочу убедиться, что (по причинам бухгалтерского учета) я правильно выполняю любую математику для конвертации валюты.*

После умножения конвертации валюты * на исходную валюту, я всегда получаю множество конечных чисел после запятой.

Есть ли стандартный способ сделать это?Должен ли я усечь или округлить?Нужно ли округлять несколько раз, если округление до 1/1000 повлияет на округление до 1/100?

Должен ли я делать что-то вроде:

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

Я былвозникли проблемы с поиском хорошей информации о том, как это делается (надеюсь, США и Европа одинаковы).

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Вы должны использовать Math.Round(x, 2, MidpointRounding.AwayFromZero)

3 голосов
/ 03 января 2012

Я предполагаю, что вы просто сможете напрямую использовать Math.Round, так как .NET использует Банковское округление.

Просто помните, что округление всегда должно быть абсолютно последним, что вы делаете, чтобы не допустить ошибок округления.

В такой валютной системе я бы также сохранял реальные необоснованные значения как десятичные числа дополнительно для будущих целей решения проблем.

1 голос
/ 12 ноября 2014

, если на вашем сайте несколько валют, используйте это для правильного округления десятичных знаков в соответствии с валютой и культурой текущего пользователя:

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