I don't know if there is an easy way, but you can write your own format function (hard way):
function mainFunction() st = sprintfe('%d is imaginary, but %d is real!',1+3i,5); disp(st); st = sprintfe('%f + %f = %f',i,3,3+i); disp(st); end function stOut = sprintfe(st,varargin) %Converts complex numbers. for i=1:numel(varargin) places = strfind(st,'%'); currentVar = varargin{i}; if isnumeric(currentVar) && abs(imag(currentVar))> eps index = places(i); formatSpecifier = st(index:index+1); varargin{i} = fc(currentVar,formatSpecifier); st(index+1) = 's'; end end stOut = sprintf(st,varargin{:}); end function st = fc(x,formatSpecifier) st = sprintf([formatSpecifier '+' formatSpecifier 'i'],real(x),imag(x)); end
This solution suffers from some errors (does not handle% 2d,% 3f), but you get a general idea.
Here are the results:
>> mainFuncio 1+3i is imaginary, but 5 is real! 0.000000+1.000000i + 3.000000 = 3.000000+1.000000i
Andrey Rubshtein
source share