Округление до ближайшего 0,5 в matlab

Как я могу округлить десятичное число до ближайшего 0.5 в matlab? Например. Я хочу, чтобы 16.625 был округлен до 16.5

3 ответов


это та же логика, тот же вопрос был сделан для C#

result = round(value*2)/2;

и обобщить, согласно aardvarkkпредложение, если вы хотите округлить до ближайшей точности acc, например acc = 0.5:

acc = 0.5;
result = round(value/acc)*acc;

Если вы идете умножить на 2 - раунд-деление на 2 маршрута, вы можете получить некоторые (очень маленькие) числовые ошибки. Вы можете сделать это с помощью mod чтобы избежать этого:

x = 16.625; 
dist = mod(x, 0.5); 
floorVal = x - dist; 
newVal = floorVal; 
if dist >= 0.25, newVal = newVal + 0.5; end

вы могли бы сделать это за меньшее количество шагов, но здесь я разбил его, чтобы вы могли видеть, что делает каждый шаг.


a=16.625;
b=floor(a);
if abs(a-b-0.5) <= 0.25
  a=b+.5;
else
  if a-b-0.5 < 0
    a=b;
  else
    a=b+1;
  end
end