将值四舍五入到最接近的 45 度的最简洁方法是什么?

What is the cleanest way to round a value to nearest 45 degrees?

我和问题here有同样的问题。

用户提问:

I just wrote this to return the nearest 45 degree angle. Like 0, 45, 90, 135...

It feels like there must be a better way of doing this though. This is working fine but it looks messy.

    public function nearestDeg(degs:int):int {
        
        if (degs >= 0 && degs <= 45) {
            if (degs <= 23) {
                return 0;
            }else {
                return 45;
            }
        }
        
        if (degs > 45 && degs <= 90) {
            if (degs <= 68) {
                return 45;
            }else {
                return 90;
            }
        }
        
        if (degs > 90 && degs <= 135) {
            if (degs <= 113) {
                return 90;
            }else {
                return 135;
            }
        }
                    
        if (degs > 135 && degs <= 180) {
            if (degs <= 158) {
                return 135;
            }else {
                return 180;
            }
        }
        
        if (degs > 180 && degs <= 225) {
            if (degs <= 203) {
                return 180;
            }else {
                return 225;
            }
        }
        
        if (degs > 225 && degs <= 270) {
            if (degs <= 248) {
                return 225;
            }else {
                return 270;
            }
        }
        
        if (degs > 270 && degs <= 315) {
            if (degs <= 293) {
                return 270;
            }else {
                return 315;
            }
        }
        
        if (degs > 315 && degs <= 360) {
            if (degs <= 338) {
                return 315;
            }else {
                return 360;
            }
        }
        
        
        return 0;
        
    }  

将值四舍五入到最接近 45 度的最简洁方法是什么?

我将该值除以 45°,四舍五入,然后再乘以 45°。伪代码:

deg = round(deg / 45) * 45;

假设:/ 运算符 returns 是浮点表示,不执行整数除法。如果特定语言不这样对待它,则应明确处理(例如,您可以除以 45.0 而不是 45)。

我知道 OP 要求度数,但弧度可能对其他人有帮助。

import numpy as np
round(radians/(np.pi/4))*np.pi/4