Алгоритм кардинального направления в Java

В эти выходные я провожу несколько минут, составляя алгоритм, который будет принимать курс (в градусах) и возвращать строку для кардинального направления (I 'Я использую его в Android-приложение компаса ям использую). То, что я закончил, было это:

private String headingToString(Float heading)
{
    String strHeading = "?";
    Hashtable cardinal = new Hashtable();
    cardinal.put("North_1", new Float(0));
    cardinal.put("Northeast", new Float(45));
    cardinal.put("East", new Float(90));
    cardinal.put("Southeast", new Float(135));
    cardinal.put("South", new Float(180));
    cardinal.put("Southwest", new Float(225));
    cardinal.put("West", new Float(270));
    cardinal.put("Northwest", new Float(315));
    cardinal.put("North_2", new Float(360));

    for (String key: cardinal.keySet())
    {
        Float value = cardinal.get(key);
        if (Math.abs(heading - value) < 30)
        {
            strHeading = key;
            if (key.contains("North_"))
            {
                strHeading = "North";
            }
            break;
        }
    }
    return strHeading;
}

Мой вопрос, это лучший способ сделать это? Должно быть, это было сделано много раз, прежде чем япоиск примеров в интернете еще не завершен. Кто-нибудь еще пробовал это и нашел более точное решение?

Редактировать для Reverand 'с тилос, Синдзинс и ХрстофферОтветы:

Решение

public static String headingToString2(double x)
{
    String directions[] = {"N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"};
    return directions[ (int)Math.round((  ((double)x % 360) / 45)) ];
}

Ответы на вопрос(5)

Ваш ответ на вопрос