Excluding 0.5 from rounding
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Israa Ahmed
il 13 Gen 2022
Commentato: John D'Errico
il 13 Gen 2022
How can I exclude the 0.5 fraction from rounding such that the fractions less than or greater than 0.5 are only to be rounded?
0 Commenti
Risposta accettata
John D'Errico
il 13 Gen 2022
You cannot do this. That is, there are only a few specific classes of rounds you can do, embodied in round, fix, floor, and ceil. (I think I listed them all.) There are no flags you can set that will control rounding.
You want to round down, for non-integer parts that are strictly less than 1/2, and round up for non-integer parts greater than 1/2, but leave those values that are exactly at 1/2 alone?
I suppose with some code, and some small effort, do what you want.
x = [1.5;rand(8,1)*10 - 5]
xr = strangeround(x)
Does that do as required?
function xround = strangeround(x)
xint = floor(x);
xfrac = x - xint;
xfrac(xfrac < 1/2) = 0;
xfrac(xfrac > 1/2) = 1;
xround = xint + xfrac;
end
0 Commenti
Più risposte (1)
Max Heimann
il 13 Gen 2022
Modificato: Max Heimann
il 13 Gen 2022
if mod(x,1) ~= 0.5
x = round(x)
end
3 Commenti
Max Heimann
il 13 Gen 2022
Modificato: Max Heimann
il 13 Gen 2022
How about this for vectors and matrices:
% Matrix with test values
x = [0 -4.5 -4.4; 3.3 0.5 1];
% Code
indices = mod(x,1) ~= 0.5;
x(indices) = round(x(indices))
John D'Errico
il 13 Gen 2022
Yes. That will work. And since 0.5 is exactly representable in floating point arithmetic as a double, the exact test for equality is sufficient.
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!