Round to nearest odd integer

조회 수: 141 (최근 30일)
Caleb
Caleb 2012년 8월 13일
편집: Walter Roberson 2019년 12월 30일
Does MATLAB have a function to round numbers to the nearest odd integer?
  댓글 수: 1
Walter Roberson
Walter Roberson 2012년 8월 14일
Do you want negative numbers handled the same way? e.g., -1/3 rounded to -1 ?

댓글을 달려면 로그인하십시오.

채택된 답변

Matt Fig
Matt Fig 2012년 8월 13일
편집: Matt Fig 2012년 8월 13일
I don't think so, but you could make your own:
function S = round_odd(S)
% round to nearest odd integer.
idx = mod(S,2)<1;
S = floor(S);
S(idx) = S(idx)+1;
  댓글 수: 2
Sean de Wolski
Sean de Wolski 2012년 8월 13일
I think you meant:
idx = mod(S,2)<1 %note < not <=
Otherwise it returns evens for S = magic(5);
Matt Fig
Matt Fig 2012년 8월 13일
Yeah, I caught that one too. I like Babak's better anyway, LOL.

댓글을 달려면 로그인하십시오.

추가 답변 (4개)

Babak
Babak 2012년 8월 13일
편집: Walter Roberson 2019년 12월 30일
Not that I know of.. but you can use this:
function y=fun(x)
y = 2*floor(x/2)+1;
end
depending on what you want to do with the even numbers you can ether use floor or ceil in the above function.
  댓글 수: 2
mirza
mirza 2019년 12월 29일
That's an efficient approach, but its better to use "round" function instead of "floor" or "ceiling" function. In floor case, the error may occur for rounding numbers to Even.
For example.
If the number is " 23.7227731 "
then statement => 2*floor(x/2) will provide answer "22"
However,
the statement => 2*round(x/2) will provide answer "24"
Walter Roberson
Walter Roberson 2019년 12월 30일
2*floor(23.7227731/2)+1 would be 23, and 23.7227731 has indeed been rounded to the nearest odd number.
2*round(23.7227731/2)+1 would be 25, but 25-23.7227731 is about 1.67 which is greater than 23.7227731-23 ~= 0.72 . Therefore 23 is the closest odd number, to 23.722773, and 25 is not the closest odd number.
I would therefore suggest to you that round() does not solve the problem posed by the original poster.

댓글을 달려면 로그인하십시오.


Azzi Abdelmalek
Azzi Abdelmalek 2012년 8월 13일
a=7.8; %example
round((a-1)/2)*2+1
  댓글 수: 3
mirza
mirza 2019년 12월 29일
True, the function "round" is better option instead of functions "floor" or "ceiling" as suggested in thread. In floor case, the error may occur for rounding numbers to Even.
For example.
If the number is " 23.7227731 "
then statement => 2*floor(x/2) will provide answer "22"
However,
the statement => 2*round(x/2) will provide answer "24"
Walter Roberson
Walter Roberson 2019년 12월 30일

댓글을 달려면 로그인하십시오.


gerit
gerit 2018년 9월 12일
편집: Walter Roberson 2018년 9월 15일
x-mod(x,2)+1
even numbers will be rounded up

Gimantha Upasena
Gimantha Upasena 2015년 4월 21일
편집: Gimantha Upasena 2015년 4월 21일
In matlab what is the method to take the values of a matrix and round them off to the nearest even number?..... meaning 2.1 should be rounded off to 2 and also 2.8 should also be rounded off to 2 because if rounded off to 3 ...3 is an odd number so it's not accepted.
  댓글 수: 1
Walter Roberson
Walter Roberson 2019년 12월 30일
편집: Walter Roberson 2019년 12월 30일
floor(x/2)*2
which should work for both positive and negative numbers.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by