Подтвердить что ты не робот

Правильный способ округления для конвертации валют в Paypal?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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