Round to nearest odd integer

141 Ansichten (letzte 30 Tage)
Caleb
Caleb am 13 Aug. 2012
Bearbeitet: Walter Roberson am 30 Dez. 2019
Does MATLAB have a function to round numbers to the nearest odd integer?
  1 Kommentar
Walter Roberson
Walter Roberson am 14 Aug. 2012
Do you want negative numbers handled the same way? e.g., -1/3 rounded to -1 ?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt Fig
Matt Fig am 13 Aug. 2012
Bearbeitet: Matt Fig am 13 Aug. 2012
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 Kommentare
Sean de Wolski
Sean de Wolski am 13 Aug. 2012
I think you meant:
idx = mod(S,2)<1 %note < not <=
Otherwise it returns evens for S = magic(5);
Matt Fig
Matt Fig am 13 Aug. 2012
Yeah, I caught that one too. I like Babak's better anyway, LOL.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (4)

Babak
Babak am 13 Aug. 2012
Bearbeitet: Walter Roberson am 30 Dez. 2019
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 Kommentare
mirza
mirza am 29 Dez. 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 am 30 Dez. 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.

Melden Sie sich an, um zu kommentieren.


Azzi Abdelmalek
Azzi Abdelmalek am 13 Aug. 2012
a=7.8; %example
round((a-1)/2)*2+1
  3 Kommentare
mirza
mirza am 29 Dez. 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 am 30 Dez. 2019

Melden Sie sich an, um zu kommentieren.


gerit
gerit am 12 Sep. 2018
Bearbeitet: Walter Roberson am 15 Sep. 2018
x-mod(x,2)+1
even numbers will be rounded up

Gimantha Upasena
Gimantha Upasena am 21 Apr. 2015
Bearbeitet: Gimantha Upasena am 21 Apr. 2015
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 Kommentar
Walter Roberson
Walter Roberson am 30 Dez. 2019
Bearbeitet: Walter Roberson am 30 Dez. 2019
floor(x/2)*2
which should work for both positive and negative numbers.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by