1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- function y=dicomrt_mmdigit(x,n,b,t)
- % dicomrt_mmdigit(x,n,b,t)
- %
- % Round values to given significant digits
- %
- % x is the array to be rounded
- % n is the number of significant places
- % b is the base (b=10 default)
- % t is the type of algorithm to use to round (t='round' default)
- % permitted types are also: 'fix', 'ceil' and 'round'
- %
- % If x is immaginary real and immaginary parts are rounded separately
- %
- % From "Mastering MATLAB 6" Duane Hanselman and Bruce Littlefield,
- % Prentice Hall, 2001 ISBN 0-13-019468-9
- %
- % Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org)
- if nargin<2
- error('dicomrt_mmdigit: Not enough input arguments')
- elseif nargin==2
- b=10;
- t='round';
- elseif nargin==3
- t='round';
- end
- n=round(abs(n(1)));
- if isempty(b),b=10;
- else b=round(abs(b(1)));
- end
- if isreal(x)
- y=abs(x)+(x==0);
- e=floor(log(y)./log(b)+1);
- p=repmat(b,size(x)).^(n-e);
- if strncmpi(t,'round',1)
- y=round(p.*x)./p;
- elseif strncmpi(t,'fix',1)
- y=fix(p.*x)./p;
- elseif strncmpi(t,'ceil',1)
- y=ceil(p.*x)./p;
- elseif strncmpi(t,'floor',1)
- y=floor(p.*x)./p;
- else
- error('dicomrt_mmdigit: Unknown rounding request');
- end
- else % complex input
- y=complex(mmdigit(real(x),n,b,t),mmdigit(imag(x),n,b,t));
- end
-
-
|