Round to nearest odd integer

Does MATLAB have a function to round numbers to the nearest odd integer?

1 comentario

Walter Roberson
Walter Roberson el 14 de Ag. de 2012
Do you want negative numbers handled the same way? e.g., -1/3 rounded to -1 ?

Iniciar sesión para comentar.

 Respuesta aceptada

Matt Fig
Matt Fig el 13 de Ag. de 2012
Editada: Matt Fig el 13 de Ag. de 2012

5 votos

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 comentarios

Sean de Wolski
Sean de Wolski el 13 de Ag. de 2012
I think you meant:
idx = mod(S,2)<1 %note < not <=
Otherwise it returns evens for S = magic(5);
Matt Fig
Matt Fig el 13 de Ag. de 2012
Yeah, I caught that one too. I like Babak's better anyway, LOL.

Iniciar sesión para comentar.

Más respuestas (4)

Babak
Babak el 13 de Ag. de 2012
Editada: Walter Roberson el 30 de Dic. de 2019

8 votos

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 comentarios

mirza
mirza el 29 de Dic. de 2019
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 el 30 de Dic. de 2019
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.

Iniciar sesión para comentar.

Azzi Abdelmalek
Azzi Abdelmalek el 13 de Ag. de 2012

3 votos

a=7.8; %example
round((a-1)/2)*2+1

3 comentarios

Roger Luna
Roger Luna el 17 de Abr. de 2015
... And for the nearest even integer:
a=7.8; %example
round((a-2)/2)*2+2
mirza
mirza el 29 de Dic. de 2019
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 el 30 de Dic. de 2019

Iniciar sesión para comentar.

gerit
gerit el 12 de Sept. de 2018
Editada: Walter Roberson el 15 de Sept. de 2018

1 voto

x-mod(x,2)+1
even numbers will be rounded up
Gimantha Upasena
Gimantha Upasena el 21 de Abr. de 2015
Editada: Gimantha Upasena el 21 de Abr. de 2015

0 votos

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 comentario

Walter Roberson
Walter Roberson el 30 de Dic. de 2019
Editada: Walter Roberson el 30 de Dic. de 2019
floor(x/2)*2
which should work for both positive and negative numbers.

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 13 de Ag. de 2012

Editada:

el 30 de Dic. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by