Excluding 0.5 from rounding
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
John D'Errico
2022-1-13
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 个评论
更多回答(1 个)
Max Heimann
2022-1-13
编辑:Max Heimann
2022-1-13
if mod(x,1) ~= 0.5
x = round(x)
end
3 个评论
Max Heimann
2022-1-13
编辑:Max Heimann
2022-1-13
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
2022-1-13
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!