Лучшее и простое решение, которое я нашел, это
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
round(1.005, 2); // 1.01
Поскольку я считаю, что это связано с арктангенсом (y / x), y появляется сверху.
Вот хорошая ссылка, немного рассказывающая об этом: Углы и направления
Это потому, что в школе используется мнемоника для вычисления градиента
превышают пробег , или, другими словами, dy / dx, или короче y / x.
И этот порядок проник в аргументы функций арктангенса.
Так что это исторический артефакт. Для меня это зависит от того, о чем я думаю
о том, когда я использую atan2
. Если я думаю о дифференциалах, я понимаю
и если я думаю о парах координат, я ошибаюсь.
Предположим, прямоугольный треугольник, противоположная сторона которого называется y, а соседняя сторона называется x:
tan (угол) = y / x
arctan (tan (угол)) = arctan ( y / x)
Мое предположение всегда заключалось в том, что это из-за определения триггера, то есть
tan(theta) = opposite / adjacent
При работе с каноническим углом от начала координат противоположным всегда является Y, а смежным всегда X, поэтому :
atan2(opposite, adjacent) = theta
То есть, это было сделано таким образом, чтобы не было путаницы в порядке математического определения.