数学需要-180到180之间的数字

时间:2015-05-16 16:29:40

标签: java

我有数学问题。

在我的世界中,偏航可以在-180到180之间,现在我需要向他的偏航者添加90。但如果偏航是150 + 90 = 240超过180,我怎么能加90但是如果它在-180时进一步计数180。

示例:

-150 + 90 = -60, No problem
0 + 90 = 90, No problem
150 + 90 = 240, Problem it needs to be -120

3 个答案:

答案 0 :(得分:1)

这是模运算的典型例子。您可以使用余数运算符%

    int current = 150;
    int input = 90;
    int newCurrent = ((180 + current + input) % 360) - 180;

    System.out.println("NEW: " + newCurrent);

输出结果为:

 NEW: -120

答案 1 :(得分:0)

你可以使用模数运算符作为正数,这看起来像一个除法但是给你剩下的而不是商:

10/6 = 1,66666...
10%6 = 4

For you: ( 150 + 90 ) % 180 = 60

答案 2 :(得分:0)

你可以这样解决:

private static final int MIN = -180;
private static final int MAX = 180;

public static void main(String[] args) {
    System.out.println(keepInRange(-150 + 90));
    System.out.println(keepInRange(0 + 90));
    System.out.println(keepInRange(150 + 90));
    System.out.println(keepInRange(-150 - 90));
}

private static int keepInRange(final int value) {
    if (value < MIN) {
        /*
         * subtract the negative number "MIN" from "value" and
         * add the negative result to "MAX" (which is like subtracting the absolute value
         * of "value" from "MAX)
         */
        return MAX + (value - MIN);
    }
    if (value > MAX) {
        /*
         * subtract the number "MAX" from "value" and to get exceeding number
         * add it to "MIN"
         */
        return MIN + (value - MAX);
    }
    return value;
}

输出结果为:

  

-60
  90个
  -120
  120个

根据你的解释,最后的值应该是 -120 120 而不是 -60 60 就像你在你的例子中说的那样。超出的金额应该添加到“其他”边界,而不是 0 150 + 90 240 ,因此它超过MAX的界限60.然后应将其添加到MIN界限中。结果是 -120

如果这不正确,请更新您的问题。