Я использую следующее, чтобы перейти к началу textView, используя Swift 4 :
DispatchQueue.main.async {
self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}
Это часто случается в финансовых расчетах при округлении до ближайшего пенни. Никакая настройка алгоритма округления отдельных операций не будет работать для каждого случая.
У вас должен быть накопитель, который отслеживает сумму, выделенную после операции округления и распределения. В конце распределения вы сверяете аккумулятор с фактическими результатами (суммированными вместе) и распределяете оставшуюся копейку.
В приведенном ниже математическом примере, если вы возьмете 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
Пробовали ли вы управлять округлением с помощью аргумента MidpointRounding?
public static decimal Round( decimal d, MidpointRounding mode )
Проверить, находится ли точка внутри многоугольника или нет -
Рассмотрим многоугольник, который имеет вершины a1, a2, a3, a4, a5. Следующий набор шагов должен помочь в определении, лежит ли точка P внутри многоугольника или снаружи.
Вычислите векторную площадь треугольника, образованного ребром a1-> a2, и векторами, соединяющими a2 с P и P с a1. Точно так же вычислите векторную площадь каждого из возможных треугольников, одна сторона которых является стороной многоугольника, а два других соединяют P с этой стороной.
Чтобы точка находилась внутри многоугольника, каждый из треугольников должен быть есть положительная область. Даже если у одного из треугольников отрицательная площадь, точка P выходит за пределы многоугольника.
Чтобы вычислить площадь треугольника с учетом векторов, представляющих его 3 ребра, обратитесь к http: //www.jtaylor1142001.
Что делать, если разделение денег - вечная проблема. Мартин Фаулер предлагает некоторые комментарии здесь (я думаю, что есть более подробные сведения в его настоящей 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;
}
Определенно Math.Round.
Я бы посоветовал не округлять результат вычисления, но если вам нужно отобразить, округлите до ближайшего пенни. Или вы можете использовать пенни в качестве наименьшего знаменателя, поэтому при отображении делите все на 100.