16で割ればいいので1方位あたり 22.5°。
0°が北、東が90°、北東は45°で、北北東は22.5°という計算。
各16方位の範囲を隣りの方位との半分と考えて、例えば東北東は 22.5° の ±11.25° なので 11.25°〜33.75°
「北」の範囲の -11.25° は後で述べるとして、およそ角度を22.5で割った数を四捨五入すると0〜16になります。
0〜16 の整数が順番に得られたので、これを添字にして配列を参照してやれば16方位が得られます。
0〜16 なので、最後の17番目には一周まわって戻ってきた「北」を解決してやればよいので
16directions.js
var dname = ["北","北北東","北東", "東北東", "東", "東南東", "南東", "南南東", "南", "南南西", "南西", "西南西", "西", "西北西", "北西", "北北西", "北"];
var dindex = Math.round( degree / 22.5 )
alert("方角は" + dname[dindex])
四捨五入が無かったり高価だったりする処理系では切り捨てを使うと思います。例えば float を int にキャストするとか
int dindex = (int)( (degree + 11.25) / 22.5 )
11.25° ぴったりを北北東に含める場合は 11.25 を足しておいた上で 22.5 で割ります。
11.25° はまだ北にしておきたいなら degree + 11.2499999... と 9 の桁数は取得してくる dgree の精度と、各処理系の桁のまるめを確認してください。