Округление проблем с выделением сумм в долларах через несколько человек

Я использую следующее, чтобы перейти к началу textView, используя Swift 4 :

DispatchQueue.main.async {
    self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}
7
задан Jon 2 August 2010 в 21:13
поделиться

5 ответов

Это часто случается в финансовых расчетах при округлении до ближайшего пенни. Никакая настройка алгоритма округления отдельных операций не будет работать для каждого случая.

У вас должен быть накопитель, который отслеживает сумму, выделенную после операции округления и распределения. В конце распределения вы сверяете аккумулятор с фактическими результатами (суммированными вместе) и распределяете оставшуюся копейку.

В приведенном ниже математическом примере, если вы возьмете 0,133, округлите его до 0,13 и сложите 3 раза, вы получите на пенни меньше, чем если вы сначала прибавите 0,133 3 раза, а затем округлите.

 0.13    0.133
 0.13    0.133
+0.13   +0.133
_____   ______
 0.39    0.399 -> 0.40
13
ответ дан 6 December 2019 в 10:53
поделиться

Пробовали ли вы управлять округлением с помощью аргумента MidpointRounding?

public static decimal Round( decimal d, MidpointRounding mode )
2
ответ дан 6 December 2019 в 10:53
поделиться

Проверить, находится ли точка внутри многоугольника или нет -

Рассмотрим многоугольник, который имеет вершины a1, a2, a3, a4, a5. Следующий набор шагов должен помочь в определении, лежит ли точка P внутри многоугольника или снаружи.

Вычислите векторную площадь треугольника, образованного ребром a1-> a2, и векторами, соединяющими a2 с P и P с a1. Точно так же вычислите векторную площадь каждого из возможных треугольников, одна сторона которых является стороной многоугольника, а два других соединяют P с этой стороной.

Чтобы точка находилась внутри многоугольника, каждый из треугольников должен быть есть положительная область. Даже если у одного из треугольников отрицательная площадь, точка P выходит за пределы многоугольника.

Чтобы вычислить площадь треугольника с учетом векторов, представляющих его 3 ребра, обратитесь к http: //www.jtaylor1142001.

2
ответ дан 6 December 2019 в 10:53
поделиться

Что делать, если разделение денег - вечная проблема. Мартин Фаулер предлагает некоторые комментарии здесь (я думаю, что есть более подробные сведения в его настоящей PoEAA книге):

Но разделение не [простое], так как мы должны позаботиться о заблудшие гроши. Мы сделаем это, вернув массив денег, так что сумма массива равна исходной сумме, а исходная сумма равномерно распределяется между элементами массива. Справедливо в этом смысле означает, что те, кто вначале, получают дополнительные гроши.

class Money... 
    public Money[] divide(int denominator) {
        BigInteger bigDenominator = BigInteger.valueOf(denominator);
        Money[] result = new Money[denominator];
        BigInteger simpleResult = amount.divide(bigDenominator);
        for (int i = 0; i < denominator ; i++) {
            result[i] = new Money(simpleResult, currency, true);
        }
        int remainder = amount.subtract(simpleResult.multiply(bigDenominator)).intValue();
        for (int i=0; i < remainder; i++) {
            result[i] = result[i].add(new Money(BigInteger.valueOf(1), currency, true));
        }
        return result;
    }
1
ответ дан 6 December 2019 в 10:53
поделиться

Определенно Math.Round.

Я бы посоветовал не округлять результат вычисления, но если вам нужно отобразить, округлите до ближайшего пенни. Или вы можете использовать пенни в качестве наименьшего знаменателя, поэтому при отображении делите все на 100.

0
ответ дан 6 December 2019 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: