0001 function new_x=round_ice(x,numnonzeros)
0002
0003
0004
0005
0006
0007
0008
0009
0010 if (nargin ~=2 | nargout>1),
0011 error('round_ice usage: new_x=round_ice(x,numonzeros)');
0012 end
0013 if ~isnumeric(x)
0014 error('round_ice error message: x must be a number and numzeros an integer');
0015 end
0016 if round(numnonzeros)~=numnonzeros
0017 error('round_ice error message: numnonzeros must be an integer larger or equal to 1')
0018 end
0019 if any(numnonzeros<1)
0020 error('round_ice error message: numnonzeros must be an integer larger or equal to 1')
0021 end
0022 if (length(numnonzeros)~=1 & size(numnonzeros)~=size(x))
0023 error('round_ice error message: numnonzeros must be an integer larger or equal to 1 or a list of integers of length length(x)')
0024 end
0025
0026
0027 lengthx=ceil(log10(abs(x)));
0028
0029
0030 lengthx(isinf(lengthx))=1;
0031
0032
0033 si=sign(x);
0034
0035
0036 new_x=si.*round(abs(x).*10.^(-lengthx+numnonzeros)).*10.^(lengthx-numnonzeros);
0037
0038