是否存在MATLAB函数可将数值取整至指定数的最近奇数倍?
实现MATLAB数值取整至指定数的最近奇数倍
你可以通过以下步骤实现需求:
- 先将目标数值转换为以指定数为单位的缩放值
- 找到该缩放值对应的最近奇数
- 再转换回原单位得到结果
示例代码
function y = round_to_odd_multiple(x, number) scaled = x / number; n = round(scaled); % 判断是否为偶数,是则调整为最近的奇数 if mod(n, 2) == 0 n = n + sign(scaled - n); end y = n * number; end
代码说明
- 缩放转换:
scaled = x / number将原数值x转换为以number为基准的单位值,比如示例中x=1.1、number=0.5时,scaled=2.2 - 取最近整数:
n = round(scaled)得到缩放值的最近整数,这里是2 - 调整为奇数:通过
mod(n,2)判断是否为偶数,若是则根据scaled和n的大小关系(用sign(scaled -n)获取符号),将偶数加1或减1得到最近的奇数,这里2是偶数,scaled-n=0.2>0,所以n变为3 - 还原数值:
y = n * number将调整后的奇数转换回原单位,得到3*0.5=1.5,符合示例需求
测试验证
- 输入
round_to_odd_multiple(1.1, 0.5),输出1.5 - 输入
round_to_odd_multiple(1.9, 0.5),输出1.5(因为1.9离1.5的距离是0.4,离2.5是0.6,最近的奇数倍是1.5) - 输入
round_to_odd_multiple(2.6, 0.5),输出2.5(缩放值5.2,最近整数是5,本身是奇数,直接返回)
如果不需要封装成函数,也可以用一行代码实现:
result = number * (round(x/number) + sign(x/number - round(x/number)) * (mod(round(x/number), 2)==0));
不过函数形式可读性更强,更便于复用。
内容的提问来源于stack exchange,提问作者William Lancelot
相关产品推荐
相关产品推荐

